https://www.cnblogs.com/xqnq2007/p/7429584.html
當使用python編程時,編碼問題一直很讓人頭疼,程序中經常會碰到如下錯誤提示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
這是由於python在安裝時,默認的編碼是ascii,當程序中出現非ascii編碼時,python的處理常常會報上面的錯誤。
對於上面問題,一般有2種處理方法:
方法1:
在python代碼開頭加上如下代碼塊:
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
這種方法是臨時的,只在程序執行時生效,系統默認編碼並沒有改變。
注意:
為了防止重新設置默認編碼影響原本依賴ASCII編碼的程序,Python編譯器在啟動時特意清除了sys模塊的setdefaultencoding方法。如果需要調用,也可以reload(sys),然后就可以看到sys.setdefaultencoding方法了,不過設置之后就是后果自負了。
經測試,reload后也沒有啟用setdefaultencoding方法。
方法2:
python安裝時默認編碼是ascii,通過sys.getdefaultencoding()可以查看默認編碼。為了一次性解決問題,我們可以修改python的默認編碼。具體操作如下:
第一步:
在python安裝目錄的Lib\site-packages文件夾下新建一個sitecustomize.py文件
第二步:
在sitecustomize.py填寫如下代碼
- # encoding=utf8
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
第三步:重啟python,通過sys.getdefaultencoding()查看默認編碼,這時結果為'utf8'
暫未測試此方法。