如何在 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'
Ôé¼Ô®¢Ôä½ÔäªÔäâ
>>>
我尝试了在类似问题的答案中找到的许多变通方法均未成功:
将代码页从 850(这是我系统中的默认值)更改为 65001(对应于 utf-8 编码)
包装sys.stdout以确保适当的编码
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
甚至更改了 - 尽管普遍不鼓励 - 默认编码
sys.setdefaultencoding("UTF-8")
None 以上对我有用。
我的问题是双重的:
- 为什么 如果我从 IDLE 运行
print u'\u20AC\u2A7D\u212B\u2126\u2103'
输出是 €⩽ÅΩ℃
(如预期的那样)而如果我 运行此代码来自 Python shell 输出不正确?
- 有没有人有任何 提示 可以正确打印 shell 中的这些符号?
原因: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 输出。
我在 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'
Ôé¼Ô®¢Ôä½ÔäªÔäâ
>>>
我尝试了在类似问题的答案中找到的许多变通方法均未成功:
将代码页从 850(这是我系统中的默认值)更改为 65001(对应于 utf-8 编码)
包装sys.stdout以确保适当的编码
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
甚至更改了 - 尽管普遍不鼓励 - 默认编码
sys.setdefaultencoding("UTF-8")
None 以上对我有用。
我的问题是双重的:
- 为什么 如果我从 IDLE 运行
print u'\u20AC\u2A7D\u212B\u2126\u2103'
输出是€⩽ÅΩ℃
(如预期的那样)而如果我 运行此代码来自 Python shell 输出不正确? - 有没有人有任何 提示 可以正确打印 shell 中的这些符号?
原因: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 输出。