如何在 Python 2 shell under Windows 中打印 unicode 字符串?

How to print unicode strings in a Python 2 shell under Windows?

我在 Python 2.7.11 下尝试打印 €、≤、Å、Ω、℃ 等符号时遇到问题Windows10。我预计 运行ning 这段代码来自 IDLE:

print u'\u20AC\u2A7D\u212B\u2126\u2103'

将在屏幕上产生以下输出:

>>> ================================ RESTART ================================
>>> 
€⩽ÅΩ℃
>>>

但事实并非如此。我获得了一个时髦的非 ascii 字符字符串。折腾了一阵子,终于通过设置环境变量得到了预期的输出:

PYTHONIOENCODING=UTF-8

到目前为止,还不错。我的问题是我无法从 Python shell:

获得相同的输出
>>> print u'\u20AC\u2A7D\u212B\u2126\u2103'
Ôé¼Ô®¢Ôä½ÔäªÔäâ
>>>

我尝试了在类似问题的答案中找到的许多变通方法均未成功:

  1. 将代码页从 850(这是我系统中的默认值)更改为 65001(对应于 utf-8 编码)

  2. 包装sys.stdout以确保适当的编码

    sys.stdout = codecs.getwriter('utf8')(sys.stdout)
    
  3. 甚至更改了 - 尽管普遍不鼓励 - 默认编码

    sys.setdefaultencoding("UTF-8")
    

None 以上对我有用。

我的问题是双重的:

原因:IDLE 使用 tkinter,它包装了 tcl/tk GUI 框架。 Tcl/tk 使用 unicode 字符串,如 Python 3,但它仅限于前 2**16 个字符(基本多语言平面,BMP)。在 Windows 上,Python 使用命令提示符,它使用的代码页大多限于 256 个字符。 CP65001 好像是个骗局;加入过去十年未能让它发挥作用的大群人。 (在网络上搜索 code page 65001。)

提示:除非您在工作代码页中将输出限制为字符,否则请使用 IDLE 运行 程序。 IDLE 有一个 -r file 启动选项。请参阅帮助 => IDLE 帮助,3.1 命令行用法。我通常不建议对 运行 已经开发的程序使用 IDLE,但是对 Windows 用于 BMP 输出。