Python 设置系统默认编码

有段时间没有更新文章了,事多忙的(借口),补一发。

因为用到 from __future__ import unicode_literals,结果有些地方字符串的处理方面出现了问题。

应该是 Python 内部编码还是 ASCII 的缘故,所以需要设置一下系统编码。

PS:本文不讨论 Python 的那些编码问题。

获取系统默认编码

>>> sys.getdefaultencoding()
'ascii'

设置系统默认编码

>>> sys.setdefaultencoding('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'setdefaultencoding'

查了一些资料才知道,原来在 Python 自带库文件 site.py 中已经 del sys.setdefaultencoding 了。

正确的方式

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

加载的 sys 包中原来是应该有 setdefaultencoding 方法的,结果在另外一个包 site 加载之后被删除了,所以 reload(sys) 之后就好了。

结束语

代码中的注释是说移除这个方法就是不让用户改变编码。

Remove sys.setdefaultencoding() so that users cannot change the encoding after initialization.

没有明白用意。