'reload(sys)'后无法在Python IDLE中输出

时间:2015-11-29 03:15:35

标签: python utf-8 output python-idle

我在python中处理中文字符时遇到了困难,但显然已添加

import sys
reload(sys)
sys.setdefaultencoding('utf8')

解决了我的问题。好吧,至少其中一些。 现在,我发现我无法在Python IDLE上发送带有printpprint的输出。

我检查了IDLE的设置,结果没问题。

enter image description here

但是,我仍然可以从PyCharm控制台获得输出。

有谁能告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

我认为IDLE会更改sys.stdout的值以将输出重定向到其窗口。如果你reload(sys),你打破了这个,并且在IDLE中看不到输出。

Python 2.7 IDLE在解释输入时似乎存在一个错误,如下所示:

>>> u'不'
u'\xe4\xb8\x8d'
>>> print u'不'
ä¸
>>> print u'\u4e0d'
不
>>> _

如您所见,文字u'不'不是Unicode字符,而是首先转换为UTF-8,然后将这些字节标记为Unicode字符串。难怪它无法正确打印。如果您提供真正的Unicode代码点,结果将按预期打印。

我不知道如何处理IDLE。我发现终端中Python的REPL已经足够好了,从emacs中运行IPython或Python解释器就更好了;两者都没有这个bug。