在python中将unicode字符打印到stdout会打印错误的字形

Ben*_*nny 0 python windows terminal utf

我想在命令提示终端上打印一组Unicode字符.即使我强制编码为"UTF-8",终端也会打印一些垃圾.

$python -c "import sys; print sys.stdout.write(u'\u2044'.encode('UTF-8'))"
?üäNone

$python -c "import sys; print sys.stdout.encoding"
cp437
Run Code Online (Sandbox Code Playgroud)

我的默认终端编码是cp437,我试图覆盖它.这里的预期输出是分数斜杠(/)

http://www.fileformat.info/info/unicode/char/2044/index.htm

同一段代码在我的Mac终端中完美运行,它使用UTF-8作为默认编码.有没有办法在Windows上显示这个?我在Windows命令提示符上使用的字体是consolas.

我希望我的代码可以使用任何Unicode字符,而不仅仅是这个特定的例子,因为输入是一个Web查询结果,我无法控制它.

Mar*_*ers 6

Python无法控制终端使用的编码; 你必须在其他地方改变它.

换句话说,仅仅因为你强制python将UTF-8编码的文本输出到终端,并不意味着你的终端也会神奇地开始接受输出为UTF-8.

Mac OS X终端已配置为使用UTF-8.

在Windows上,您可以使用以下chcp命令切换控制台代码页:

chcp 65001
Run Code Online (Sandbox Code Playgroud)

其中65001是UTF-8的Windows代码页.请参阅Windows命令行中的Unicode字符 - 如何操作?