我已经阅读了所有有关Unicode、UTF-8、编码/解码等方面的内容,但我仍然感到困难。
我创建了一个简短的示例片段来说明我的问题。
我想打印字符串“Geïrriteerd”,就像它在这里写的一样。如果我使用以下代码将其正确地打印到文件中,并通过重定向到文件运行它,如“Test.py > output”
# coding=utf-8
import codecs
import sys
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
print u'Geïrriteerd'
但是如果我不进行重定向操作,上述代码将在终端打印出“Ge├»rriteerd”。如果我删除“codecs.getwriter”行,它就可以正常地打印到终端,但是会在文件中打印出“Ge├»rriteerd”。
如何使它在两种情况下都能正确打印?
我正在使用Windows 10上的Python 2.7。我知道Python 3.x通常更好地处理Unicode,但由于其他依赖关系,我目前无法在我的项目中使用它。
chcp.com
;如果您使用完整名称和 .com 文件扩展名,则不需要shell=True
。顺便说一下,控制台的 UTF-8 支持存在缺陷。将控制台输入代码页更改为 UTF-8(65001)会在所有 Windows 版本中限制输入为 7 位 ASCII(在 Windows 10 中,非 ASCII 字符将被读取为'\0'
)。对于 Python 2 和 Windows 7 及更早版本,将输出代码页设置为 65001 将在将非 ASCII 打印到控制台时产生垃圾输出,甚至在控制台使用 OEM 光栅字体时完全失败。 - Eryk Sun