打算用Python解析一下網路日誌檔。
必然地遇上了中文亂碼的問題。
小弟以前學Java,用Python解決中文亂碼的問題真不知道如何入手。
在Java下面調試通過的程式碼,放在Python環境下就給我鬧脾氣了。
費我九牛二虎之力,終於在一位Oschina大大的幫助下問題解決了。
Python編碼的思路主要是:
1.字串
2.Unicode
3.目標編碼集其中(CP936,GB2312,GBK,GB18030似貌可以互相直接轉換,大部分的編碼是一樣的)
了解Python的系統編碼的結構,先看以下的一段程式碼:
import locale def p(f): print '%s.%s(): %s' % (f.__module__, f.__name__, f()) # 返回当前系统所使用的默认字符编码 p(sys.getdefaultencoding) # 返回用于转换Unicode文件名至系统文件名所使用的编码 p(sys.getfilesystemencoding) # 获取默认的区域设置并返回元祖(语言, 编码) p(locale.getdefaultlocale) # 返回用户设定的文本数据编码 # 文档提到this function only returns a guess p(locale.getpreferredencoding) # \xba\xba是'汉'的GBK编码 # mbcs是不推荐使用的编码,这里仅作测试表明为什么不应该用 print r"'\xba\xba'.decode('mbcs'):", repr('\xba\xba'.decode('mbcs')) #在笔者的Windows上的结果(区域设置为中文(简体, 中国)) #sys.getdefaultencoding(): gbk #sys.getfilesystemencoding(): mbcs #locale.getdefaultlocale(): ('zh_CN', 'cp936') #locale.getpreferredencoding(): cp936 #'\xba\xba'.decode('mbcs'): u'\u6c49'