Python 2.7 Unicode/IDLE 混淆
我读了很多关于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