0

最近、データベースを SQL_ASCII から UTF8 エンコーディングに移行しました。アプリケーションを実行した後、次のようなエラーメッセージが表示され始めます

UTF-8 エンコーディングの文字 0xc296 は、「WIN1252」に相当するものはありません

そのため、iconv に遭遇し、変換は次の手順で行われました

1-既存のデータベースを次のようにダンプします

"C:\Program Files\PostgreSQL\9.0\bin/pg_dump.exe" --host localhost --port  5433 --username "myadmin" --format plain --encoding UTF8 --verbose --file "C:\UTF8Dump.sql" mydb

[b]iconv[/b]を使用して2変換

 "C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f windows-1252 -t UTF-8 C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql

3 新しい UTF エンコード DB を作成する

4 ステップ #2 から sql をインポートします

エラーは解消されましたが、

取得している他のシステムで

UTF-8 への移行後、エンコーディング UTF-8 の文字 0xe2809a は「LATIN9」の問題で同等ではありません

したがって、このような異なる変換で上記の同じ手順を試しました

"C:\Program Files\GnuWin32\bin\iconv.exe"  -c  -f ISO-8859-15 -t UTF-8  C:\UTF8Dump.sql>C:\ConvertedUTF8Dump.sql

しかし、エラーはまだ発生します

UTF-8 への移行後、エンコーディング UTF-8 の文字 0xe2809a に対応する「LATIN9」の問題がありません

何か案は?

4

1 に答える 1

2

ソース DB は確かSQL_ASCIIですか?

データベース内のテキストは実際にはどのエンコーディングでしたか? そこにいくつかの異なるエンコーディングが混在している可能性はありますか? これは、適切なエンコーディング規則を適用していない DB では珍しいことではありません。

0xc296inutf-8unicode U+96 START OF GUARDED AREAです。これは、windows-1252 ソースからの変換に由来する、かなり無意味な文字のようです。

0xe2809autf-8 ではunicode U+201a SINGLE LOW-9 QUOTATION MARKです。ISO-8859-15 では有効ではないため、PostgreSQL はここで正しくエラーを生成しています。

おそらく、データベースには相互に互換性のないエンコードされた文字列が複数あるため、データベース全体に1つの変換が適用されることはありません。混合エンコーディングのミスマッシュから厳密な utf-8 環境に移行する喜びへようこそ。

または、DB のエンコーディングが確実にわかっていて、一貫性があることがわかっている場合は、DB なしで試してからpg_dump、ダンプを編集し、ステートメントを追加/変更して、新しいエンコーディングを反映させることができます。の後にダンプ内の を変更しなかった場合は、Pg に、変換したデータをあたかもそれが何であるかのように解釈するように指示することになるため、問題を十分に説明できる可能性があります。--encodingiconvSET client_encodingSET client_encodingiconvutf-8latin-9

于 2012-10-03T06:29:55.413 に答える