我有脚本获取一些数据并通过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'
答案 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