将内容为utf-8字符串的unicode转换为s

2024-04-19 21:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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'

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


Tags: textcontentdomxa0x82zhxe5xe6
1条回答
网友
1楼 · 发布于 2024-04-19 21:25:25

如果有带UTF-8字节的unicode值,则编码为拉丁文-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'})

在这一点上你根本不需要重新编码。

相关问题 更多 >