1. 程式人生 > >python讀文件出現中文亂碼

python讀文件出現中文亂碼

文件編碼 cnblogs edi style 輸出結果 時間 讀取 color lin

最近開始處理中文文本,讀取文件有時候會出現亂碼。原因:編碼和解碼方式不一樣。 所以,解決這個問題的方法就是正確地解碼,問題拆解為:1、弄清楚待查看文件的編碼方式;2、解碼。 即: 1、查看文件編碼方式:
import chardet
fobj=open(fname,r)
data=fobj.read()
print chardet.detect(data)[‘encoding‘]
2、編碼類型轉換 python默認使用unicode字符集,默認編碼方式utf-8.
str.decode(gbk)    #將gbk編碼的字符串轉換成unicode編碼
str.encode(gbk) #將unicode編碼的字符串轉換成gbk編碼

附錄A: windows文件默認編碼方式與地域有關:微軟為了適應世界上不同地區用戶的文化背景和生活習慣,在Windows中設計了區域(Locale)設置的功能。每個Locale代表了某個國家或地區的一組設定,包括字符集,數字、貨幣、時間和日期的格式等。Windows用一個4字節32位二進制值給Locale編號,記作LCID(Locale ID)。它的高16位表示字符的排序方法,一般為0。在它的低16位中,低10位代表某種語言,高4位指定該語言適用的地區。如中文在中國大陸地區和臺灣地區有簡體和繁體的區分,它們的低10位相同而高4位不同。 Linux文件的默認編碼方式
可以在終端執行locale命令,查看輸出結果中 LC_CTYPE 對應的內容。 附錄B: 1981,中國國家標準總局發布GB2312字符集(16位)。 1993 ,國際標準組織發布unicode 1.1字符集(unicode字符集有多個編碼方式,分別是UTF-8,UTF-16,UTF-32和UTF-7。)。 中國國家標準總局發布GB13000.1-93字符集(16位)。擴充GB2312字符集=>GBK(guo biao kuo)字符集(16位)。
就包含字符來說: GBK = GB2312 +繁體中文+1981年之後簡化的簡體中文 就包含的中文字符而言:GBK= Unicode 1.1 + GB13000.1-93

python讀文件出現中文亂碼