我正在使用Python3(最近从Python2切换过来)。我的代码通常在Linux上运行,但有时(不经常)在Windows上运行。根据Python 3关于^{encoding
参数,则文本文件的默认编码来自locale.getpreferredencoding()
。对于我的一个项目,我希望这个默认值是utf-8
,不管它运行在什么操作系统上(目前,它总是在Linux上运行UTF-8,而不是在Windows上)。这个项目有许多对open()
的调用,我不想将encoding='utf-8'
添加到所有这些调用中。因此,正如Python 3所看到的,我想在Windows中更改区域设置的首选编码。
我发现了一个问题
“Changing the "locale preferred encoding"”,这是一个公认的答案,所以我认为我很好去。但不幸的是,这个答案中建议的命令和它的第一条评论在Windows中都不起作用。具体来说,这个公认的答案和它的第一条注释建议运行chcp 65001
和set PYTHONIOENCODING=UTF-8
,我已经尝试了这两种方法。请从我的命令窗口查看下面的文字记录:
> 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开始,这个黑客程序如下所示:
此后打开的所有文件将假定默认编码为
utf8
。我知道这是一个非常复杂的解决方法,但是您可以像这样重新定义
locale.getpreferredencoding()
函数:如果您在早期运行这个程序,那么在utf-8中打开之后打开的所有文件(至少在win-xp机器上的测试中是这样)都会覆盖模块方法,这将应用于所有平台。
相关问题 更多 >
编程相关推荐