Python 2.7 Unicode/IDLE 混淆

1 投票
1 回答
2052 浏览
提问于 2025-04-17 17:40

我读了很多关于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有关?

1 个回答

1

这是因为IDLE的输出窗口不支持UTF-8编码,而打印一个Unicode字符串时,它会自动尝试用标准输出的编码来编码这个字符串。下面是来自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

撰写回答