2010-05-06 63 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

相关问题