文件讀取錯誤UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 884: invalid start byte


參考:

https://segmentfault.com/q/1010000004268196/a-1020000004269556

ubuntu下Python3使用open('filename', 'r').read()讀取 .txt 文件時拋出異常:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 66: invalid start byte
當相同語句在Python2下運行時卻正常,請問問題出在哪里啊?

0x9210010010,UTF8 中編碼一個字符的第一個字節(start byte)只可能是 0xxxxxxx110xxxxx1110xxx11110xxx……而后面的字節只可能是 10xxxxxx。也就是說 0x92 只能作為后面的字節,卻出現在了第一個字節的位置。

出現這種問題絕大部分情況是因為文件不是 UTF8 編碼的(例如,可能是 GBK 編碼的),而系統默認采用 UTF8 解碼。解決方法是改為對應的解碼方式。

極少數情況是因為文件損壞了或者和一部分非 UTF8 編碼混在一起,可以修復文件或采用 replace 等方式解碼。

Python 2 沒有問題是因為 Python 2 默認以字節流(對應 Python 3 的 bytes)的方式讀文件,不像 Python 3 默認解碼為 unicode,把讀文件的方式改為 rb 有同樣的效果,不過 Python 3 中處理 bytes 還可能遇到很多問題就是了……

 

最后決定,以二進制形式讀取,忽略特殊字符造成的轉碼錯誤,然后就可以了:

contents = open('F:\\28\\數據分析\\MLiA_SourceCode\\machinelearninginaction\\Ch04\\\email\\ham/%d.txt'%i,'rb').read().decode('utf8','ignore')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM