Python字符串转Unicode

55
我有一个包含Unicode字符的字符串,例如\u2026等。但是我收到的是str而不是unicode。如何将它转换回Unicode?这个问题可能与以下重复:如何在Python中将ASCII字符串视为Unicode并取消转义其中的字符?如何在Python字符串中将Unicode转义序列转换为Unicode字符?
>>> a="Hello\u2026"
>>> b=u"Hello\u2026"
>>> print a
Hello\u2026
>>> print b
Hello…
>>> print unicode(a)
Hello\u2026
>>> 

很明显,unicode(a)不是答案。那么正确的答案是什么呢?


1
标签已经说明了,但为了更清楚地指出,这个问题的重点是在Python 2.x上,而不是3.x。 - Adam
3个回答

78

Unicode 转义符仅适用于 Unicode 字符串,因此这样:

 a="\u2026"

实际上是由6个字符组成的字符串:'\\', 'u', '2', '0', '2', '6'。

要将其转换为 Unicode,请使用 decode('unicode-escape')

a="\u2026"
print repr(a)
print repr(a.decode('unicode-escape'))

## '\\u2026'
## u'\u2026'

28

使用unicode-escape编解码:

>>> a="Hello\u2026"
>>> a.decode('unicode-escape')
u'Hello\u2026'
>>> print _
Hello…
这是因为在非Unicode字符串中,\u2026无法被识别,而被视为字符序列(更明确地说,'Hello\\u2026')。您需要解码转义字符,可以使用unicode-escape编解码器来实现。请注意,通过指定编解码器参数,您也可以让unicode以同样的方式识别它:
>>> unicode(a, 'unicode-escape')
u'Hello\u2026'

但是使用a.decode()的方式更好。


17
>>> a="Hello\u2026"
>>> print a.decode('unicode-escape')
Hello…

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接