1

我已经阅读了很多关于 Unicode 和 Python 2.7 中的各种编码/解码的内容,但我仍然无法理解为什么 IDLE 似乎无法打印正确的字符串。

我有一个 unicode 字符串:

>>> s = u"Hey I\u2019m Bob"
>>> print s
Hey I'm Bob

但是,在我编码为 UTF-8 后,我得到:

>>> s.encode('utf-8')
'Hey I\xe2\x80\x99m Bob'
>>> print s.encode('utf-8')
Hey I’m Bob

我不知道为什么我不能正确打印它,但我可以将 s.encode('utf-8') 写入文本文件并且它可以正确输出。不确定这是否与 IDLE 有关?

4

1 回答 1

1

这是因为 IDLE 的输出窗口不支持 UTF-8,但打印 Unicode 字符串会自动尝试将字符串编码为 stdout 编码。以下来自 IDLE 控制台:

>>> s = u"Hey I\u2019m Bob"
>>> print s
Hey I’m Bob
>>> print s.encode('utf8')
Hey I’m Bob
>>> import sys
>>> sys.stdout.encoding
'cp1252'
>>> print s.encode('cp1252')
Hey I’m Bob
于 2013-03-02T06:00:39.860 回答