重定向 Python 脚本的 Windows 控制台输出而不引发 UnicodeEncodeError

重定向 Python 脚本的 Windows 控制台输出而不引发 UnicodeEncodeError

我有一个名为的 Python 脚本scratch_1.py,为了回答这个问题,可以将其简化为:

s = "∞"

print(s)

如果我在 Windows 控制台中运行该脚本,我会得到预期的输出:

python scratch_1.py

输出:

但是,如果我尝试将 Windows 控制台的输出重定向到文件,则会引发错误:

python scratch_1.py > temp.txt

输出:

Traceback (most recent call last):
  File "C:\Users\Wok\AppData\Roaming\JetBrains\PyCharmCE2022.2\scratches\scratch_1.py", line 3, in <module>
    print(s)
  File "C:\Users\Wok\AppData\Local\Programs\Python\Python311\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode character '\u221e' in position 0: character maps to <undefined>

我想出了解决方法

然而,我更希望有一个解决方案不需要修改 Python 脚本


我曾想过使用chcp 65001

这导致了下面显示的观察结果,但这并没有修复 Python 错误。


chcp
echo ∞

输出:

850

chcp
echo ∞ > temp.txt
type temp.txt

输出:

850
8

chcp 65001
echo ∞ > temp.txt
type temp.txt

输出:

65001

chcp 65001
python scratch_1.py > temp.txt

输出:

65001
UnicodeEncodeError (same as before)

有什么想法或建议吗?

相关内容