python 修改預設編碼方式
阿新 • • 發佈:2019-02-19
今天碰到了 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')
既然 sitecustomize.py 能被自動載入, 所以除了設定編碼外, 也可以設定一些其他的東西.
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')
既然 sitecustomize.py 能被自動載入, 所以除了設定編碼外, 也可以設定一些其他的東西.