2010-05-06 65 views
3

我使用Python 2.6.5,當我運行在Python外殼下面,我得到:爲什麼Python輸出的字符串和unicode的值相同?

>>> print u'Andr\xc3\xa9' 
André 
>>> print 'Andr\xc3\xa9' 
André 
>>> 

什麼是對上述的解釋?鑑於u'Andr \ xc3 \ xa9',如何在HTML頁面中正確顯示上述值,以顯示André而不是André?

+0

不知道爲什麼,但我發現這個有趣的結果: >>> U '\ XC3版權所有\ xA9' == '\ XC3版權所有\ xA9' __main __:1:UnicodeWarning:統一等於比較未能兩個參數爲Unicode轉換 - 將它們解釋爲不相等 False – 2010-05-06 15:09:40

回答

11

'\xc3\xa9'是unicode字符u'\u00e9'(也可指定爲u'\xe9')的UTF-8編碼。所以你可以使用u'Andr\u00e9'u'Andr\xe9'

您可以從一個轉換到另一個:

>>> 'Andr\xc3\xa9'.decode('utf-8') 
u'Andr\xe9' 
>>> u'Andr\xe9'.encode('utf-8') 
'Andr\xc3\xa9' 

注意,原因print 'Andr\xc3\xa9'給你預期的結果僅僅是因爲系統的默認編碼是UTF-8。例如,在Windows上,我得到:

>>> print 'Andr\xc3\xa9' 
André 

至於輸出HTML,它取決於你使用的Web框架,什麼編碼您在HTML頁面輸出。某些框架(例如Django)會自動將unicode值轉換爲正確的編碼,而其他框架則會要求您手動執行此操作。

+0

我目前正在使用Django,並且模板中顯示的輸出是André。你知道我應該怎樣做模板顯示André嗎? – 2010-05-06 15:23:54

+0

@Thierry Lam:Django假定所有非Unicode字符串都是UTF-8。因此,在這種情況下,您可以使用'Andr \ xc3 \ xa9'(UTF-8編碼的字符串)或'u'Andre \ xe9'(unicode字符串)。 – interjay 2010-05-06 15:28:13

1

試試這個:

>>> unicode('Andr\xc3\xa9', 'utf-8') 
u'Andr\xe9' 
>>> print u'Andr\xe9' 
André 

這可以回答你的問題。

編輯:或見上面的回答

-2

我不知道,但我猜想,不同的編解碼器是由打印操作應用。可能是一些utf-8與unicode問題。

對於HTML,您需要使用unicode的HTML語法對某些字符進行編碼。 我認爲Python codecs模塊可能會幫助你。

+0

這是我讀過的最散漫,無關緊要,無益的答案。這甚至沒有錯,只是沒有說什麼。 – raylu 2012-01-06 01:46:24

相關問題