首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在它们的真实符号中变成utf

在它们的真实符号中变成utf
EN

Stack Overflow用户
提问于 2020-07-04 17:48:40
回答 2查看 69关注 0票数 3

我刚刚自己做了第一个网络爬虫,它上了维基百科,下载了整个页面的html。我设法获得了一个列表的内容。列表中的值包含正数或负数。但它给了我一个'\xe2\x88\x922',而不是打印出一个'-2'。我尝试了string.replace("\xe2\x88\x92","-"),但由于反斜杠的原因,这似乎不起作用。你知道我怎样才能把这些utf东西转换成它们真正的符号吗?如果这很重要,我使用urllib来获取html内容。

EN

回答 2

Stack Overflow用户

发布于 2020-07-04 18:06:18

您可以使用bytes.decode对其进行转换:

代码语言:javascript
复制
>>> b'\xe2\x88\x922'.decode("utf8")
'-2'

如果您的数据不是以b开头(即,如果它不是bytes对象),您可以先将其转换为bytes,然后再解码:

代码语言:javascript
复制
>>> s = '\xe2\x88\x922'
>>> byte_object = bytes(ord(c) for c in s)
>>> byte_object.decode("utf8")
'-2'
票数 3
EN

Stack Overflow用户

发布于 2020-07-04 18:12:20

不幸的是,从web页面读取数据时,这种情况很常见:它们包含的字符看起来像标准的ASCII字符,但事实并非如此。

这里有一个减号字符(unicode U+2212) ,它看起来像普通的连字符减号(unicode U+002D或ASCII0x2D) -

在UTF8中,它被编码为b'\xe2\x88\x922'。这可能意味着当它是UTF8编码的时候,读起来就好像它是Latin1编码的一样。

正确重新编码的一个技巧是将其编码为Latin1,然后解码回来:

代码语言:javascript
复制
t =  '\xe2\x88\x922' 
print(t.encode('latin1').decode()

−2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62727634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档