如何在Python字符串中将Unicode转义序列转换为Unicode字符

32 投票
3 回答
47464 浏览
提问于 2025-04-15 12:13

当我尝试用“unicode(head.contents[3])”来获取一个标签的内容时,我得到了类似这样的输出:“Christensen Sk\xf6ld”。我希望能把这个转义序列作为字符串返回。请问在Python中该怎么做呢?

3 个回答

10

假设你有一个包含Unicode转义字符的字节字符串,比如 b"\N{SNOWMAN}"。如果你用 b"\N{SNOWMAN}".decode('unicode-escape) 这个方法去处理它,就会得到你想要的Unicode字符串 u'\u2603',也就是雪人的符号。

10

我觉得它其实是正常工作的。默认情况下,Python会用ASCII编码来显示字符串,因为并不是所有的终端都支持unicode。如果你真的打印这个字符串,它应该是可以正常显示的。看看下面这个例子:

>>> u'\xcfa'
u'\xcfa'
>>> print u'\xcfa'
Ïa
34

假设Python把这个名字当成普通字符串,你首先需要把它解码成unicode格式:

>>> name
'Christensen Sk\xf6ld'
>>> unicode(name, 'latin-1')
u'Christensen Sk\xf6ld'

还有一种方法可以做到这一点:

>>> name.decode('latin-1')
u'Christensen Sk\xf6ld'

注意字符串前面的“u”,这表示它是unicode格式。如果你打印出来,这个带重音的字母就会正确显示:

>>> print name.decode('latin-1')
Christensen Sköld

顺便说一下:在必要的时候,你可以使用“encode”方法把unicode转换成比如说UTF-8格式的字符串:

>>> name.decode('latin-1').encode('utf-8')
'Christensen Sk\xc3\xb6ld'

撰写回答