重定向输出时更改了Windows编码

c2e8gylq  于 2023-04-13  发布在  Windows
关注(0)|答案(2)|浏览(147)

你好,我有下面的python文件'test.py':

import sys
print(sys.stdout.encoding)
sys.stdout.reconfigure(encoding='utf-8') 
print(sys.stdout.encoding)

当我奔跑时

py test.py

我得到:

utf-8
utf-8

但当我跑的时候

py test.py > test.txt

py test.py | Out-File -FilePath test.txt -Encoding ASCII

我从test.txt中得到:

cp1252
utf-8

当我跑步时:

import sys, locale
print(sys.getdefaultencoding())
print(locale.getpreferredencoding())

我得到:

utf-8
cp1252

问题:
我可以知道为什么会发生这种情况吗?我应该怎么做才能在重定向时默认编码为utf-8?
谢谢

jdg4fx2g

jdg4fx2g1#

您正在使用Windows。这是因为Windows 7控制台不理解UTF-8。因此,当您显示标准输出时,它需要编码为Windows可以显示的内容。
Luciano Ramalho的书Fluent Python很好地解释了这一点。

pgky5nke

pgky5nke2#

我能知道为什么会这样吗

因为Python开发人员选择这样做。请参阅文档:
在Windows上,UTF-8用于控制台设备。非字符设备(如磁盘文件和管道)使用系统区域设置编码(即ANSI代码页)。

怎么做才能让重定向时默认编码为utf-8?

强制编码。我已经将以下内容添加到受此问题困扰的程序中:

if os.name == "nt":
    sys.stdout.reconfigure(encoding="utf-8")

如果您使用stderr,您可能也需要重新配置它。

相关问题