我正在使用 Python 3(最近从 Python 2 切换而来)。我的代码通常在 Linux 上运行,但有时(不经常)在 Windows 上运行。根据 Python 3 文档open() https://docs.python.org/3/library/functions.html#open,文本文件的默认编码来自locale.getpreferredencoding()
if the encoding
未提供 arg。我希望这个默认值是utf-8
对于我的一个项目,无论它运行在什么操作系统上(目前,Linux 上始终使用 UTF-8,但 Windows 上则不然)。该项目有很多次调用open()
我不想添加encoding='utf-8'
对他们所有人。因此,我想更改 Windows 中语言环境的首选编码,正如 Python 3 所看到的那样。
我找到了之前的一个问题
”更改“区域设置首选编码” https://stackoverflow.com/questions/11514414/changing-the-locale-preferred-encoding”,它有一个已接受的答案,所以我认为我可以走了。但不幸的是,该答案中的建议命令及其第一个注释在 Windows 中都不适合我。具体来说,该已接受的答案及其第一个注释建议运行chcp 65001
and set PYTHONIOENCODING=UTF-8
,我都尝试过。请从我的 cmd 窗口查看下面的文字记录:
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> chcp 65001
Active code page: 65001
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
> set PYTHONIOENCODING=UTF-8
> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()
请注意,即使在执行了两个建议的命令之后,我打开的文件的编码仍然是cp1252
而不是预期的utf-8
.
从 python3.5.1 开始,这个 hack 看起来像这样:
import _locale
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])
此后打开的所有文件都将采用默认编码utf8
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)