先直截了当给出解决方案,在程序开头加上:
import _locale
_locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8'])
在Windows下经常用python open函数的人相信都遇到过UnicodeDecodeError: ‘gbk’ codec…这种编码问题。而且很多有经验的人应该知道解决方法是加上参数encoding=“utf-8”,因为"utf-8"是更通用的编码:
open("test.txt",encoding="utf-8")
然而这样的解决方法也有一些问题:
我正是因为碰到了第二种情况,于是下定决心找一个一劳永逸的方法解决问题,这就要对原理做一些深入探究。
Python 和 encoding 相关的配置主要有下面几个:
locale.getpreferredencoding()
这个用的是最广的。 这是 Python 在 open 文件时默认使用的 encodingsys.getdefaultencoding()
是 Python 进行 str/unicode(byte/str) 转换时默认使用的 encodingsys.getfilesystemencoding()
是用来 encoding 文件名的, 例如 open(b’balabala’)PYTHONIOENCODING
环境变量, 则以次变量为准
4.2 标准输入输出是打到终端的话, 看终端的 locale 配置, 在 windows cmd 的代码页
4.3 标准输入输出被重定向到文件的话, 则参照 1 , 用的是 ` locale.getpreferredencoding()
----出自:http://neue.v2ex.com/t/271999所以我们的目标是要修改环境配置,python解释器会取_getdefaultlocale()[1]作为默认编码类型。
所以我们采用:
import _locale
_locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8'])
重写函数后,会改变当前运行环境下的所有模块的默认编码。