4 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個贊
如果需要在數(shù)據(jù)庫中存儲UTF8數(shù)據(jù),則需要一個接受UTF8的數(shù)據(jù)庫。您可以在pgAdmin中檢查數(shù)據(jù)庫的編碼。只需右鍵單擊數(shù)據(jù)庫,然后選擇“屬性”。
但是該錯誤似乎告訴您源文件中存在一些無效的UTF8數(shù)據(jù)。這意味著該copy實(shí)用程序已檢測到或猜測您正在向其提供UTF8文件。
如果您在Unix的某種變體下運(yùn)行,則可以使用該file實(shí)用程序檢查編碼(或多或少)。
$ file yourfilename
yourfilename: UTF-8 Unicode English text
(我認(rèn)為這也可以在終端機(jī)的Mac上使用。)不確定如何在Windows下執(zhí)行此操作。
如果您在Windows系統(tǒng)上的文件(即未使用UTF8編碼的文件)上使用相同的實(shí)用程序,則可能會顯示以下內(nèi)容:
$ file yourfilename
yourfilename: ASCII text, with CRLF line terminators
如果情況仍然很怪異,則可以嘗試將輸入數(shù)據(jù)轉(zhuǎn)換為已知的編碼,更改客戶端的編碼或同時(shí)更改兩者。(我們真的在擴(kuò)展我對編碼知識的了解。)
您可以使用該iconv實(shí)用程序來更改輸入數(shù)據(jù)的編碼。
iconv -f original_charset -t utf-8 originalfile > newfile
您可以按照“ 字符集支持”中的說明更改psql(客戶端)編碼。在該頁面上,搜索短語“啟用自動字符集轉(zhuǎn)換”。

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊
顯然,我可以隨時(shí)設(shè)置編碼,
set client_encoding to 'latin1'
然后重新運(yùn)行查詢。不知道我應(yīng)該使用哪種編碼。
latin1使字符清晰易讀,但是大多數(shù)帶重音符號的字符都是大寫的,不應(yīng)該使用大寫的。我以為這是由于編碼錯誤所致,但是我認(rèn)為它實(shí)際上是錯誤的數(shù)據(jù)。我最終保留了latin1編碼,但是對數(shù)據(jù)進(jìn)行了預(yù)處理并解決了大小寫問題。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個贊
如果可以丟棄不可轉(zhuǎn)換的字符,可以使用-cflag
iconv -c -t utf8 filename.csv > filename.utf8.csv
然后將它們復(fù)制到您的表中
添加回答
舉報(bào)