解码'raw'字符串转换为unicode

时间:2016-03-08 21:19:23

标签: python python-2.7 unicode encoding

我有脚本获取一些数据并通过lxml解析它。

最初它有lxml.etree._ElementUnicodeResult类型,但我们可以轻松地将其转换为unicode

有一些危险的时刻。 此unicode字符串包含字符串的原始字节。虽然它的类型为unicode,但它保留了常规python str的原始字节。

label
Out[53]: u'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'

有没有办法将这个unicode原始字节串实际转换为原始字节(str类型在python 2上)。

我可以轻松地将其复制粘贴到交互式控制台并将其实际转换为unicode点:

'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'
Out[54]: '\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'

'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'.decode('utf-8')
Out[55]: u'\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440'

3 个答案:

答案 0 :(得分:1)

使用“latin-1”编码对字符串进行编码,该编码直接将256个字符U + 0000到U + 00FF映射到单个字节。

>>> s = u'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'
>>> s.encode('latin-1')
b'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'

答案 1 :(得分:1)

你的Unicode字符串是用错误的编解码器解码的。它看起来像latin1。您可以使用相同的错误编解码器对其进行重新编码,然后使用正确的编解码器进行解码。

s = u'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80'
print(s.encode('latin1').decode('utf8'))

输出:

Владимир

更好的是,首先正确解码; ^)

答案 2 :(得分:-1)

这有帮助吗?

0_Simple/asyncAPI