Unicode转换使用UTF-8字符串的内容为str(Convert unicode with ut

2019-08-08 09:32发布

我使用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是Unicode字符串使用UTF-8编码的内容:

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'

conent == u'\xe5\xb1\x82\xe5\x8f\xa0\xe6\xa0\xb7\xe5\xbc\x8f\xe8\xa1\xa8'

Answer 1:

如果你有一个unicode使用UTF-8字节值,编码为Latin-1的保存“字节”:

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使用任一requestsurllib检索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'})

在这一点你不必重新编码的。



文章来源: Convert unicode with utf-8 string as content to str