為什麽在sys.setdefaultencoding之前要寫reload(sys)
阿新 • • 發佈:2017-11-20
為什麽在sys.setdefaultencoding之前要寫reload(sys)
為什麽在sys.setdefaultencoding之前要寫reload(sys)
python 中獲得系統默認編碼為:
import sys
print sys.getdefaultencoding()
而修改系統默認編碼應寫為:
import sys
reload(sys)
sys.setdefaultencoding(‘UTF-8‘) #可以寫成utf-8!
為什麽需要一個看似多余的reload(sys)呢?
先看下python的模塊加載過程:
# python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/local/lib/python2.6/site.pyc matches /usr/local/lib/python2.6/site.py
import site # precompiled from /usr/local/lib/python2.6/site.pyc
....
Python運行的時候首先加載了site.py,在site.py文件裏有這麽一段代碼:
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
在sys加載後,setdefaultencoding方法被刪除了,所以我們要通過重新導入sys來設置系統編碼。
本文出自 “聖騎士控魔之手” 博客,請務必保留此出處http://wutengfei.blog.51cto.com/10942117/1983533
為什麽在sys.setdefaultencoding之前要寫reload(sys)