UTF-8 PostgreSQL DB を WIN-1255 シェープファイルに変換する
-
19-09-2019 - |
質問
ヘブライ語テキスト列を含む 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 以外のコードのマッピングを決定できます。