[轉]修改python默認的編碼方式


今天碰到了 python 編碼問題, 報錯信息以下
Traceback (most recent call last):
  File "ntpath.pyc", line 108, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 36: ordinal not in range(128)

顯然是當前的編碼爲ascii, 沒法解析0xa1(十進制爲161, 超過上限128). 進入python console後, 發現默認編碼確實是 ascii, 驗證過程爲:

>>>import sys
>>>sys.getdefaultencoding()
#輸出爲ascii. 

#在使用 sys.setdefaultencoding('utf8'), 報錯!
>>>sys.setdefaultencoding('utf8') 
AttributeError: 'module' object has no attribute 'setdefaultencoding' 

google 到一個 limodou 回覆的帖子, http://www.linuxforum.net/forum/showflat.php?Cat=&Board=python&Number=580942&page=15&view=collapsed&sb=5&o=

limodou講到, sys.setdefaultencoding 方法在python導入 site.py 後就刪除了, 不能再被調用了.  在肯定sys已經導入的狀況下, 能夠reload sys這個模塊, 以後, 再 sys.setdefaultencoding('utf8') 
>>>reload(sys)
>>>sys.setdefaultencoding('utf8') 

確實有效, 根據 limodou 講解,  site.py 是 python 解釋器啓動後, 默認加載的一個腳本. 若是使用 python -S 啓動的話, 將不會自動加載 site.py. 

上面寫的挺囉嗦的. 

==================================
如何永久地將默認編碼設置爲utf-8呢?  有2種方法: 
==================================
第一個方法<不推薦>: 編輯site.py, 修改setencoding()函數, 強制設置爲 utf-8 
第二個方法<推薦>: 增長一個名爲 sitecustomize.py, 推薦存放的路徑爲 site-packages 目錄下
sitecustomize.py 是在 site.py 被import 執行的, 由於 sys.setdefaultencoding() 是在 site.py 的結尾處被刪除的, 因此, 能夠在 sitecustomize.py 使用 sys.setdefaultencoding(). 
#file name:  sitecustomize.py
import sys  
sys.setdefaultencoding('utf-8')   php

相關文章
相關標籤/搜索