[英]Convert unicode with utf-8 string as content to str
我正在使用pyquery来解析页面:
dom = PyQuery('http://zh.wikipedia.org/w/index.php', {'title': 'CSS', 'printable': 'yes', 'variant': 'zh-cn'})
content = dom('#mw-content-text > p').eq(0).text()
但我得到的content
是一个带有utf-8编码内容的unicode字符串:
u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8...'
怎么能把它转换成str
而不丢失内容?
说清楚:
我想要conent == '\\xe5\\xb1\\x82\\xe5\\x8f\\xa0\\xe6\\xa0\\xb7\\xe5\\xbc\\x8f\\xe8\\xa1\\xa8'
not conent == u'\\xe5\\xb1\\x82\\xe5\\x8f\\xa0\\xe6\\xa0\\xb7\\xe5\\xbc\\x8f\\xe8\\xa1\\xa8'
如果你有一个UTF-8字节的unicode
值,编码为Latin-1以保留'bytes':
content = content.encode('latin1')
因为Unicode码点U + 0000到U + 00FF都使用latin-1编码一对一映射; 因此,此编码将您的数据解释为文字字节。
对于你的例子,这给了我:
>>> content = u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
>>> content.encode('latin1')
'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'
>>> content.encode('latin1').decode('utf8')
u'\u5c42\u53e0\u6837\u5f0f\u8868'
>>> print content.encode('latin1').decode('utf8')
层叠样式表
PyQuery
使用requests
或urllib
来检索HTML,在requests
的情况下,使用响应的.text
属性。 这仅基于Content-Type
标头中的编码集自动解码响应数据,或者如果该信息不可用,则使用latin-1
(对于文本响应,但HTML是文本响应)。 您可以通过传入encoding
参数来覆盖它:
dom = PyQuery('http://zh.wikipedia.org/w/index.php', encoding='utf8',
{'title': 'CSS', 'printable': 'yes', 'variant': 'zh-cn'})
此时你根本不需要重新编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.