为什么Python输出相同值的字符串和Unicode不同?
我在使用Python 2.6.5,当我在Python的命令行中运行下面的代码时,得到了:
>>> print u'Andr\xc3\xa9'
André
>>> print 'Andr\xc3\xa9'
André
>>>
这是什么意思呢?对于u'Andr\xc3\xa9',我该怎么在网页上正确显示这个值,让它显示为André,而不是André呢?
3 个回答
-2
我不太确定,但我猜打印操作可能用了不同的编码方式。可能是utf-8和unicode之间的问题。
对于HTML,你需要用HTML的语法来编码某些字符,以便它们能正确显示。我觉得Python的codecs模块可能能帮到你。
1
试试这个:
>>> unicode('Andr\xc3\xa9', 'utf-8')
u'Andr\xe9'
>>> print u'Andr\xe9'
André
这可能能回答你的问题。
编辑:或者看看上面的回答
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,这取决于你使用的网页框架以及你在 HTML 页面中使用的编码。有些框架(比如 Django)会自动把 unicode 值转换成正确的编码,而有些框架则需要你手动进行转换。