2013-03-02 83 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