在Python中,處理中文字符一直是很令人頭痛的問題,一言不合就亂碼,而且引起亂碼的原因也不盡相同,有時候是python本身默認的編碼器設置的不對,有時候是使用的IDE的解碼器不對,還有的時候是終端terminal的解碼器不對,有時候同一份代碼在Python2上正常運行,Python3上就不行了,反正產生亂碼的原因很多,這里就列舉一些博主遇到過的一些錯誤及其解決方案:
Error 1:
UnicodeEncodeError: 'gbk' codec can't encode character '\x??' in position ?: illegal multibyte sequence
這個是在Win7上用Python3編譯的時候遇到的,原因是win7的python3的默認編碼不是utf8,我們只需要將默認編碼改為utf8就能解決這個問題,參見下面的代碼:
import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') # Change default encoding to utf8
Error 2:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position: ordinal not in range(128)
這個是Mac上使用Python2編譯的時候遇到的,原因是也是由於python2的默認編碼不是utf8,我們只需要將默認編碼改為utf8就能解決這個問題,參見下面的代碼:
import sys reload(sys) sys.setdefaultencoding('utf-8')
像其他的產生錯誤的原因,比如IDE顯示亂碼,或者終端Terminal顯示亂碼,可以通過Google搜索快速的找出解決方法,這里就不贅述了。
參考資料:
http://ajucs.com/2015/11/10/Python-character-encoding-explained.html