为什么在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来设置系统编码。