你好,我有下面的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?
谢谢
2条答案
按热度按时间jdg4fx2g1#
您正在使用Windows。这是因为Windows 7控制台不理解UTF-8。因此,当您显示标准输出时,它需要编码为Windows可以显示的内容。
Luciano Ramalho的书Fluent Python很好地解释了这一点。
pgky5nke2#
我能知道为什么会这样吗
因为Python开发人员选择这样做。请参阅文档:
在Windows上,UTF-8用于控制台设备。非字符设备(如磁盘文件和管道)使用系统区域设置编码(即ANSI代码页)。
怎么做才能让重定向时默认编码为utf-8?
强制编码。我已经将以下内容添加到受此问题困扰的程序中:
如果您使用
stderr
,您可能也需要重新配置它。