1. 程式人生 > >為什麽在sys.setdefaultencoding之前要寫reload(sys)

為什麽在sys.setdefaultencoding之前要寫reload(sys)

為什麽在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)