天天看點

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range解決方安

Python在安裝時,預設的編碼是ascii,當程式中出現非ascii編碼時,python的處理常常會報這樣的錯UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python沒辦法處理非ascii編碼的,此時需要自己設定将python的預設編碼,一般設定為utf8的編碼格式。

查詢系統預設編碼可以在解釋器中輸入以下指令:

Python代碼  

1. >>>sys.getdefaultencoding()      

設定預設編碼時使用:

Python代碼  

1. >>>sys.setdefaultencoding('utf8')      

 可能會報AttributeError: 'module' object has no attribute 'setdefaultencoding'的錯誤,執行reload(sys),在執行以上指令就可以順利通過。

此時在執行sys.getdefaultencoding()就會發現編碼已經被設定為utf8的了,但是在解釋器裡修改的編碼隻能保證當次有效,在重新開機解釋器後,會發現,編碼又被重置為預設的ascii了,那麼有沒有辦法一次性修改程式或系統的預設編碼呢。

有2種方法設定python的預設編碼:

一個解決的方案在程式中加入以下代碼:

Python代碼  

1. import sys
2. reload(sys)
3. sys.setdefaultencoding('utf8')      

 另一個方案是在python的Lib\site-packages檔案夾下建立一個sitecustomize.py,内容為:

Python代碼  

1. # encoding=utf8
2. import sys
3. 
4. reload(sys)
5. sys.setdefaultencoding('utf8')