39

次の例外が発生します。

Caused by: org.postgresql.util.PSQLException: ERROR: character 0xefbfbd of encoding "UTF8" has no equivalent in "WIN1252"

SQLまたはプログラムのいずれかを介して、そのような文字を根絶する方法はありますか?
(SQLソリューションをお勧めします)。

WIN1252を使用してDBに接続することを考えていましたが、同じ問題が発生します。

4

9 に答える 9

36

同様の問題があり\encoding UTF8、クライアントでエンコーディングをUTF8に設定してからINSERT INTO foo (SELECT * from bar WHERE x=y);. 私のクライアントは WIN1252 エンコーディングを使用していましたが、データベースは UTF8 であったため、エラーが発生しました。

詳細については、PostgreSQL wiki のCharacter Set Support (開発ドキュメント) を参照してください。

于 2013-10-15T21:05:23.307 に答える
12

このメッセージを受け取ったとき、あなたはどうしますか?Postgres にファイルをインポートしますか? devstuff が言ったように、それは BOM キャラクターです。これは、テキスト ファイルが UTF8 エンコーディングで保存されるときに、Windows が最初にテキスト ファイルに書き込む文字です。これは非表示の幅 0 の文字であるため、テキスト エディタで開いても表示されません。

このファイルをメモ帳などで開いて、ANSI エンコーディングで名前を付けて保存し、ファイルに行を追加 (または同様set client_encoding to 'WIN1252'の行を置き換え) してみてください。

于 2009-10-14T14:00:53.847 に答える
7

キャラクターを排除しないでください。それらは本物であり、正当な理由で使用されています。代わりに、Win1252 を根絶してください。

于 2009-10-14T09:53:09.333 に答える
1

Postgres の部分文字列関数を使用し、代わりにそれを選択することで回避できました。

select substring(comments from 1 for 200) from billing

特殊文字が各フィールドを開始したというコメントは、最終的にそれを解決するのに大きな助けになりました.

于 2014-10-27T18:07:22.687 に答える
0

この問題は、postgresql 9.1 DB にアクセスする古い Access 97 アプリで 2016 年 11 月 19 日頃に発生しました。

これは、ドライバーを ANSI ではなく UNICODE に変更することで解決されました (plang のコメントを参照)。

于 2016-11-22T17:35:16.103 に答える
0

Windows 10 で北京語をデフォルト言語として使用しているときに、この問題に直面しました。この問題は、データベースを UTF-8 でインポートしようとしたために発生しました。psql で確認して "\l" を実行すると、collat​​e が表示され、cytpe は北京語です。

解決策として、OS 言語を US にリセットし、PostgreSQL を再インストールします。照合が UTF-8 に戻ると、OS 言語を再度リセットできます。

ここに完全なコンテキストと解決策を書きますhttps://www.yodiw.com/fix-utf8-encoding-win1252-cputf8-postgresql-windows-10/

于 2020-05-02T16:59:50.707 に答える