为什么Python以不同的方式输出字符串和相同值的unicode?

时间:2010-05-06 15:03:59

标签: python unicode

我正在使用Python 2.6.5,当我在Python shell中运行以下内容时,我得到:

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

上述解释是什么?鉴于u'Andr \ xc3 \ xa9',如何在html页面中正确显示上述值,以便显示André而不是André?

3 个答案:

答案 0 :(得分:11)

'\xc3\xa9'是unicode字符u'\u00e9'的UTF-8编码(也可以指定为u'\xe9')。因此,您可以使用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值转换为正确的编码,而其他框架则需要您手动执行此操作。

答案 1 :(得分:1)

试试这个:

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

这可以回答你的问题。

编辑:或看到上面的回答

答案 2 :(得分:-2)

我不确定,但我猜测打印操作会应用不同的编解码器。可能有一些utf-8与unicode问题。

对于HTML,您需要使用unicode的HTML语法对某些字符进行编码。 我认为Python codecs模块可能能够为您提供帮助。