2017-02-09 18 views
4

私のSQLスクリプトでcsvファイルを読み込み、データをpostgre sqlテーブルにコピーしています。コードの行は以下の通りです:エンコーディング 'WIN1252'のバイトシーケンス0x9dのキャラクタには、 'UTF8'のエンコーディングでは同等の文字はありません

\copy participants_2013 from 'C:/Users/Acrotrend/Desktop/mip_sahil/mip/reelportdata/Participating_Individual_Extract_Report_MIPJunior_2013_160414135957.Csv' with CSV delimiter ',' quote '"' HEADER; 

私は、次のエラーを取得しています:エンコーディングで0x9dバイト配列と文字が「WIN1252」は「UTF8」を符号化する際には同等のを持っていません。

誰でもこの問題の原因を教えてもらえますか?どのように解決できますか?

答えて

6

0x9Dは、WIN1252では有効なバイト値ではありません。 の表は、ここにあります:https://en.wikipedia.org/wiki/Windows-1252

問題は、あなたが(私は多くのWindowsシステムでのデフォルトであると信じている)は、Windows-1252をデフォルトされたUTF-8ファイルとPostgreSQLをインポートしていることかもしれません。

chcpでスクリプトを実行する前に、Windowsのコマンドラインで文字セットを変更する必要があります。または、postgresqlで次のようにすることができます:

SET CLIENT_ENCODING TO 'utf8'; 

ファイルをインポートする前に。

+0

ありがとうございます!!それは完全に働いた! –

1

すべてのエンコーディングには、有効なコードの数値範囲があります。あなたのデータはwin1252エンコーディングになっていますか?

Postgresは非常に厳密で、エンコードされていない可能性のあるファイルはインポートされません。許容モードで動作するiconvを使用すると、破損した文字を削除できます。 iconvでクリーニングした後、ファイルをインポートできます。

+0

データが表すはずのものがわかっている場合は、正しいエンコードをhttps://cdn.rawgit.com/tripleee/8bit/master/encodings.html#9dで見つけることができます。 – tripleee

+0

私のファイルはメモ帳で表示され、「UTF8」として表示されました。だから私はなぜそれが私にエンコードの問題のエラーを与えるのか分からない。 –

+1

あなたのpostgresqlクライアントがWin1252エンコーディングに切り替えることがあります。 "show client_encoding;"の結果は何ですか? –

関連する問題