在用Python2.7.11在Windows 10中打印诸如欧元、≤,Å,Ω,℃等符号时,我遇到了问题。我期望从空闲运行这段代码
print u'\u20AC\u2A7D\u212B\u2126\u2103'
将在屏幕上产生以下输出:
>>> ================================ RESTART ================================
>>>
€⩽ÅΩ℃
>>>
但事实并非如此。我得到了一串古怪的非ascii字符。经过一段时间的挣扎之后,我终于通过设置一个环境变量获得了预期的输出:
PYTHONIOENCODING=UTF-8
到现在为止还好。我的问题是我无法从Python 获得相同的输出。
>>> print u'\u20AC\u2A7D\u212B\u2126\u2103'
Ôé¼Ô®¢Ôä½ÔäªÔäâ
>>>
在回答类似的问题时,我尝试了一些解决办法,但都没有成功:
所有这些都不适合我。
我的问题有两个:
print u'\u20AC\u2A7D\u212B\u2126\u2103'
,输出是€⩽ÅΩ℃
(如预期的那样),而如果我从Python运行这段代码,则输出是不正确的?发布于 2016-04-20 14:00:08
原因:空闲使用tkinter,它封装了tcl/tk GUI框架。Tcl/tk使用unicode字符串,比如Python 3,但它仅限于前2**16个字符(基本的多语言平面BMP)。在Windows上,Python使用命令提示符,它使用的代码页大多限于256个字符。CP65001似乎是一个骗局;加入过去十年未能让它发挥作用的大量人群。(搜索code page 65001
。)
提示:除非您将输出限制为工作代码页中的字符,否则请使用空闲运行程序。空闲有一个-r file
启动选项。请参阅帮助=>空闲帮助,3.1命令行使用情况。我通常不建议使用空闲来运行已经开发的程序,但是在Windows上运行BMP输出。
https://stackoverflow.com/questions/36751544
复制相似问题