解码'原始'字符串转换为unicode
问题描述:
我有脚本获取一些数据并通过lxml解析它。解码'原始'字符串转换为unicode
最初它有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
类型的蟒蛇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'
答
编码使用“Latin-1的”编码,这通过直截了当U + 00FF的256个字符U + 0000映射到单个字节的字符串。
>>> 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'
答
这是否帮助?
str1 = repr(u'\xd0\x92\xd0\xbb\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xb8\xd1\x80')
print type(str1)
print str1
# or
print str1[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'))
输出:
Владимир
更重要的是,在第一时间正确地解码它; ^)
如果'label'结束有该值必须有在你的代码中的错误。显示产生它的实际代码。 – ekhumoro