Python當前的預設編碼設定setdefaultencoding
阿新 • • 發佈:2019-01-24
http://hi.baidu.com/dushm/blog/item/95597acb5373431dbe09e6af.html
在Python開發過程中,常常會遇到這樣的問題,很讓人頭疼:
......
print s
......
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
究其原因,是想要在螢幕上輸出的字元,不符合當前設定終端編碼。在上面這個例子中,當前終端的編碼設定為ascii,而欲輸出的字元為utf-8編碼,ascii的每個字元的十進位制編碼都在0-128以內,當然無法識別utf-8的編碼。
要解決這個問題,首先修改終端的字元編碼設定:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
可以看到,當前的預設編碼是ascii,要修改這個設定,可以在Python安裝目錄下的Lib/site-packages目錄中,新建一個sitecustomize.py檔案(也可以建在其它地方,然後手工匯入,建在這裡,每次啟動Python的時候設定將自動生效),內容如下:
import sys
sys.setdefaultencoding('utf-8') #set default encoding to utf-8
然後可以檢視到改變已經生效
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
此時執行程式,如果仍然報告之前的錯誤,只需要顯示地設定輸出的編碼
print s.encode('utf-8')
就可以看到正確顯示。
在Python開發過程中,常常會遇到這樣的問題,很讓人頭疼:
......
print s
......
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
究其原因,是想要在螢幕上輸出的字元,不符合當前設定終端編碼。在上面這個例子中,當前終端的編碼設定為ascii,而欲輸出的字元為utf-8編碼,ascii的每個字元的十進位制編碼都在0-128以內,當然無法識別utf-8的編碼。
要解決這個問題,首先修改終端的字元編碼設定:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
可以看到,當前的預設編碼是ascii,要修改這個設定,可以在Python安裝目錄下的Lib/site-packages目錄中,新建一個sitecustomize.py檔案(也可以建在其它地方,然後手工匯入,建在這裡,每次啟動Python的時候設定將自動生效),內容如下:
import sys
sys.setdefaultencoding('utf-8') #set default encoding to utf-8
然後可以檢視到改變已經生效
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
此時執行程式,如果仍然報告之前的錯誤,只需要顯示地設定輸出的編碼
print s.encode('utf-8')
就可以看到正確顯示。