2

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

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

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

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

ありがとう、

アダム

アップデート:

私はこれが解決されたと思いました(私自身の答えを参照してください)、それでも私は次のようなランダムなエラーを受け取ります:

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

私が欲しいのは、ある種の省略機能です。たとえば、同等のintターゲットエンコーディングを持たないソース文字を単にコピーしないiconv's フラグのようなものです。-c

4

3 に答える 3

1

本当に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に直接クエリを使用するかpgdumpall、SQLを使用してメモ帳にロードし、UTF-8ではなくヘブライ語として再保存します(SQL DDLにリストされているエンコード設定を調整します)。

WindowsプログラムのメーカーがUTF-8をサポートするように説得できるのではないかと思います。今世紀にコードページ固有のソフトウェアで立ち往生するのは少し悲しいことです。

于 2009-12-13T14:43:39.583 に答える
0

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;ステートメントはトリックを行います。

于 2010-01-07T07:44:02.403 に答える
0

ヘブライ語のエンコーディングテーブルとページテーブルを確認すると、ISO-8859-8Windows-1255にはのマッピングがないことがわかります0x9f

変換しようとしているデータは、DOSでのヘブライ語のコードページで ある古いコードページ862に基づいている可能性があります。Codepage 862コード0x9fをUnicode文字「LATINSMALLLETTERFWITHHOOK」にマップします0x0192

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

于 2011-02-11T13:30:08.287 に答える