我使用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é?
我使用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é?
'\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值轉換爲正確的編碼,而其他框架則會要求您手動執行此操作。
我目前正在使用Django,並且模板中顯示的輸出是André。你知道我應該怎樣做模板顯示André嗎? – 2010-05-06 15:23:54
@Thierry Lam:Django假定所有非Unicode字符串都是UTF-8。因此,在這種情況下,您可以使用'Andr \ xc3 \ xa9'(UTF-8編碼的字符串)或'u'Andre \ xe9'(unicode字符串)。 – interjay 2010-05-06 15:28:13
試試這個:
>>> unicode('Andr\xc3\xa9', 'utf-8')
u'Andr\xe9'
>>> print u'Andr\xe9'
André
這可以回答你的問題。
編輯:或見上面的回答
不知道爲什麼,但我發現這個有趣的結果: >>> U '\ XC3版權所有\ xA9' == '\ XC3版權所有\ xA9' __main __:1:UnicodeWarning:統一等於比較未能兩個參數爲Unicode轉換 - 將它們解釋爲不相等 False – 2010-05-06 15:09:40