我正在使用Python 3(最近从Python 2切换).我的代码通常在Linux上运行,但有时(不常见)在Windows上运行.根据Python 3文档open(),locale.getpreferredencoding()如果encoding未提供arg,则文本文件的默认编码来自.我希望这个默认值适用于我utf-8的项目,无论它运行的是什么操作系统(目前,它始终是Linux的UTF-8,但不适用于Windows).该项目有很多次调用open(),我不想添加encoding='utf-8'到所有这些调用.因此,我想在Windows中更改区域设置的首选编码,就像Python 3看到的那样.
我发现了之前的问题" 更改"区域设置首选编码" ",它有一个已接受的答案,所以我觉得我很高兴.但不幸的是,该答案中的建议命令及其第一条评论都不适用于Windows.具体而言,公认的答案和它的第一个意见建议运行chcp 65001和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')
>>> …Run Code Online (Sandbox Code Playgroud) 我可以跨平台方式更改默认(2.7)文本编码吗?open() io.open()
所以我不需要每次都指定open(...,encoding='utf-8').
在文本模式下,如果编码未指定使用的编码是与平台相关的:
locale.getpreferredencoding(False)被称为获取当前的本地编码.
虽然文档没有指定如何设置首选编码.该功能在locale模块中,所以我需要更改区域设置?是否有任何可靠的跨平台方式来设置UTF-8语言环境?它会影响除默认文本文件编码以外的任何其他内容吗?
或者区域设置更改是危险的(可能会破坏某些东西),我应该坚持自定义包装,例如:
def uopen(*args, **kwargs):
return open(*args, encoding='UTF-8', **kwargs)
Run Code Online (Sandbox Code Playgroud)