質問

ヘブライ語テキスト列を含む PostgreSQL\PostGIS 空間データベースがあります。システムは Ubuntu 上で実行され、すべてが UTF-8 で完璧に動作します。

Windows-1255文字列のみを読み取ることができるWindowsプログラムのシェープファイルにいくつかのテーブルをダンプしようとしています。残念ながら、 pgsql2shp エンコードオプションはありませんが、 shp2pgsql があるため、Widnows プログラムは UTF-8 を Windows-1255 として解析して読み取り、意味不明になります。

テーブルの列に Windows-1255 ビューを作成しようとしましたが、データベースを破損せずにそれを行う方法が見つかりませんでした。

テーブルを変換する方法はありますか?

ありがとう、

アダム

アップデート:

これは解決されたと思いましたが(私自身の答えを参照)、まだ次のようなランダムなエラーが発生します。

ERROR:  character 0x9f of encoding "WIN1255" has no equivalent in "UTF8"

私が欲しいのは、ある種の省略機能です。のように iconvさんの -c これは、同等の int ターゲット エンコーディングを持たないソース文字をコピーしないだけです。

役に立ちましたか?

解決

本当に ASCII を意味するのであれば、ヘブライ語文字を救うことは不可能です。ASCII は、以下に設定された 7 ビット文字のみです。 \x7F.

では、この Windows プログラムはどのような文字列を読み取るのでしょうか?ASCII または Latin-1 の場合、ヘブライ語を取得することはできません。おそらく、それは「現在のシステム コード ページ」であり、Windows では (誤解を招きますが一般に)「ANSI」としても知られています。

その場合は、Windows プログラムを実行するすべてのマシンのシステム コード ページをヘブライ語 (コード ページ 1255) に設定する必要があります。shp ファイルには文字エンコード情報がまったく含まれていないため、シェープファイルはこのコード ページ セット (イスラエル ロケールのみのデフォルト) を備えたマシンでのみ正しく動作すると思います。(どうやら .dbf エクスポートには付随するものがある場合があります .cpg ファイルでエンコードを指定しますが、使用しているプログラムがそれをサポートしているかどうかはわかりません。)

次に、データをコード ページ 1255、または Postgres で取得する最も近い ISO-8859-8 としてエクスポートする必要があります。エクスポート スクリプトにはデータベースから直接バイトを取得する以外のオプションがないようなので、ISO-8859-8 エンコーディングでデータベースを作成し、UTF-8 データベースからすべてのデータを転送する必要があります。 8859-8 にクエリを介して直接接続するか、おそらくより簡単な方法で 8859-8 に接続します。 pgdumpall SQL をメモ帳にロードし、UTF-8 ではなくヘブライ語として再保存します (SQL DDL にリストされているエンコード設定は途中で調整します)。

Windows プログラムの作成者に UTF-8 をサポートするよう説得できるでしょうか?今世紀になって、コードページ固有のソフトウェアに固執するのは少し悲しいことです。

他のヒント

bash スクリプト内から:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
do
        if [[ -n $ENCODING ]]; then
                export PGCLIENTENCODING=$ENCODING;
                break
        else
                echo 'Invalid encoding.'
        fi
done

export PGCLIENTENCODING=$ENCODING; ステートメントはうまくいきます。

テーブルとページテーブルをエンコードするヘブライ語をチェックすると、それがわかります ISO-8859-8 そして Windows-1255 マッピングがありません 0x9f.

変換しようとしているデータは古いものに基づいている可能性があります。 コードページ 862、DOSの下のヘブライ語のコードページ。Codepage 862 コードをマッピングする 0x9f Unicode文字「フック付きラテンの小さな文字f」に、 0x0192.

同様の「ランダム」エラーを調査し、データ内の Windows 1255 以外のコードのマッピングを決定できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top