我能否以跨平台的方式更改默认的open()
(2.7中使用
)文本编码?io.open()
这样我就不需要每次都指定open(...,encoding='utf-8')
了。
在文本模式下,如果未指定编码,则使用的编码取决于平台:
locale.getpreferredencoding(False)
将被调用以获取当前区域设置编码。
虽然文档没有说明如何设置首选编码。该函数位于locale
模块中,因此我需要更改区域设置吗?是否有可靠的跨平台方法来设置UTF-8区域设置?它会影响除默认文本文件编码之外的其他内容吗?
或者说更改区域设置是有风险的(可能会破坏某些东西),所以我应该坚持使用自定义包装器,例如:
def uopen(*args, **kwargs):
return open(*args, encoding='UTF-8', **kwargs)
locale.setlocale()
,但它没有改变Windows上的默认编码。即使是不同的非Unicode编码。所以我决定检查CPython的源代码,并发现getpreferredencoding
使用了GetACP WinAPI函数,它“检索当前Windows ANSI代码页标识符”。 - user