为什么Python输出相同值的字符串和Unicode不同?

3 投票
3 回答
3794 浏览
提问于 2025-04-15 22:25

我在使用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 值转换成正确的编码,而有些框架则需要你手动进行转换。

撰写回答