使用python2進行中文文本的時候,由于編碼的問題,會出現亂碼。
原因就是,python内部使用unicode進行字元的處理,但我們輸入進去的字元編碼可能是各式各樣的。
是以需提前對輸入文本進行decode操作。但是decode需要指定解碼的類型比如,gbk,gb2312等,需要對文本進行判斷。python中有内置子產品可以檢視chardet
import chardet
text = open(fileName,'r').read()
print chardet.detect(text)
然後根據查詢的結果進行解碼。
但遇到的問題就是,查詢的結果是gb2312,但是解碼還是出錯。
這時我們要清楚一個問題,字元集的大小問題
GB2312,GBK,GB18030,是相容的,包含的字元個數,以此更多,可以寫成:
GB2312 < GBK < GB18030
這樣,python中再遇到中文亂碼問題時,可以通過字元集的大小進行實驗。即:
、設定gb2312為解碼方式,如果解碼失敗;
text = text.decode('gb2312')
、設定gbk為解碼方式,如果解碼失敗;
text = text.decode('gbk')
、設定gb18030為解碼方式,如果失敗;
text = text.decode('gb18030')
、此方法無效,請google其他方法。
注意
在最後寫入檔案時,一定要用encode進行編碼操作。
text = text.encode('utf8')