更改“语言环境首选编码”

8

[使用Python 3.2]

如果我不给open提供encoding参数,那么文件将使用locale.getpreferredencoding()打开。例如,在我的Windows机器上,每次我使用open('abc.txt')时,它都将使用cp1252进行解码。

我想将所有输入文件切换到utf-8。显然,我可以在所有的open函数调用中添加encoding = 'utf-8'。或者更好的是,encoding = MY_PROJECT_DEFAULT_ENCODING,其中该常量在全局级别的某个地方被定义。

但我想知道是否有一种简洁的方法来避免编辑所有的open调用,通过改变“默认”的编码方式。这是我可以通过更改语言环境来改变的吗?或通过更改语言环境内部的参数来实现?我试图遵循Python手册,但未能理解应该如何使用它。

谢谢!


在我发现这个问题之前,我曾经问过一个不同措辞的重复问题,并得到了一些答案。你可能会发现它们有用:有没有办法改变Python的open()默认文本编码? - user
在类似的问题中还有一些答案:在Windows中更改Python 3的“locale preferred encoding” - Antony Hatchkins
请参考 https://dev59.com/XlwZ5IYBdhLWcg3wbv3q#61570285 中的解决方案,该方案在 Python 3.7 上已经得到了验证。 - Peter Fogh
请查看 https://dev59.com/XlwZ5IYBdhLWcg3wbv3q#61570285,这是我在 Python 3.7 上得到的解决方案。 - Peter Fogh
1个回答

3
在Windows系统中,如果您想要使用Python 3.3+版本,并且希望编码为UTF-8,请在控制台或批处理文件中执行chcp 65001命令,然后再运行Python。

谢谢。除非我设置PYTHONIOENCODING=UTF-8,否则它不适用于Python 3.2,但似乎适用于Python 3.3。让我再试一下,然后我会更新这个评论。 - max
1
这个被接受的答案对我完全没用。我尝试了chcp 65001set PYTHONIOENCODING=UTF-8。请看下面我的“答案”,它应该真正地出现在这个评论位置。谢谢。 - walrus
代码页65001在控制台中使用时存在问题。与控制台主机进程conhost.exe和C运行时相关的多个错误。每个版本都在不断改进,但即使是带有VC++ 14的Windows 10仍然存在缺陷。此外,这仅影响标准输入、标准输出和标准错误的_Py_device_encodinglocale.getpreferredencoding()返回Windows ANSI编码--正如它应该的那样。 - Eryk Sun
2
@eryksun 感谢您提供的信息,但其中包含了太多针对Windows的专业术语,我很少使用Windows。我只想知道一种方法,可以让我告诉Windows 8或Python 3:“亲爱的Windows 8 / Python 3,请注意,此计算机上的所有文本文件都应该使用UTF-8编码,没有例外。请在将来打开文本文件时记住这个事实。谢谢。” - walrus
“chcp” 不是必需的,也不能解决问题 - 它只控制终端的设置,与 IO 或打开文件无关。PYTHONIOENCODING 是更好的方法,但在这种情况下也不能解决问题 - 它只控制 stdio(从/到 stdin/stdout 的管道)。 - ejm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接