有段时间没有更新文章了,事多忙的(借口),补一发。
因为用到 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.
没有明白用意。