2017-02-09 60 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; 

我收到以下錯誤:與編碼「WIN1252」 0x9d字節序列字符在編碼「utf-8」不等價的。

任何人都可以幫我解決這個問題的原因,我該如何解決它?

回答

6

問題是在WIN1252中0x9D不是有效的字節值。 這裏有一個表:https://en.wikipedia.org/wiki/Windows-1252

的問題可能是你導入的是UTF-8的文件和PostgreSQL將默認到Windows 1252(我相信是許多Windows系統默認值)。

在運行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;」的結果是什麼? –

相關問題