2013-03-02 95 views
1

我已经阅读了很多关于Unicode以及Python 2.7中的各种编码/解码的知识,但是我仍然无法理解为什么IDLE似乎无法打印正确的字符串。Python 2.7 Unicode/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

这是因为IDLE的输出窗口是不支持UTF-8,但印刷Unicode字符串自动尝试在标准输出编码串进行编码。以下是来自空闲控制台:

>>> 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 
+0

谢谢,有没有办法让IDLE支持UTF-8? – rottentomato56 2013-03-02 06:25:28

+0

不确定。我使用支持UTF-8的[pywin32](http://sourceforge.net/projects/pywin32/files/pywin32/)扩展中的PythonWin。 – 2013-03-02 06:26:39

+0

如果您在IDLE中打印Unicode字符串,即使stdout编码为“cp1252”(一种不支持中文的编码),我也能正确打印中文。所以只需打印不带编码的Unicode字符串。 – 2013-03-02 06:33:04