我想在通过管道传输(例如,文件)时将文本打印为 UTF-8,因此在 Windows 10 上的 Python 3.7.3 上通过 PowerShell,我这样做:
import sys
if not sys.stdout.isatty():
sys.stdout.reconfigure(encoding='utf-8')
print("Mamma mia.")
Run Code Online (Sandbox Code Playgroud)
当 run as 时encodingtest.py > test.txt,test.txt结果是这样的:
00000000 FF FE 4D 00 61 00 6D 00 6D 00 61 00 20 00 6D 00 ÿþM.a.m.m.a. .m.
00000010 69 00 61 00 2E 00 0D 00 0A 00 i.a.......
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它以 开头FF FE,它是 UTF-16-LE 的字节顺序标记——并且在字符之间打印空字节(就像 UTF-16 那样)!但是,当我通过 CMD 而不是 PowerShell 运行它时,它可以很好地打印 UTF-8。即使通过 PowerShell 进行管道传输,我如何让 Python 打印 UTF-8?
我可以运行encodingtest.py …