我使用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