问答

为什么这个字符串赋值给了一个变量,就不能转码了

作者:admin 2021-04-17 我要评论

取出这个‘\xe7\x9b\xb8\xe5\x85\xb3\xe7\xbb\x93\xe6\x9e\x9c\xe7\xba\xa60\xe4\xb8\xaa’字符串是可以在这后面加.encode("raw_unicode_escape").decode("utf-8...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

取出这个‘\xe7\x9b\xb8\xe5\x85\xb3\xe7\xbb\x93\xe6\x9e\x9c\xe7\xba\xa60\xe4\xb8\xaa’字符串是可以在这后面加.encode("raw_unicode_escape").decode("utf-8"),实现转码的。但是在原来的字符串变量里就不行。。。

import re
import requests
response=requests.get('http://so.eastmoney.com/web/s?keyword=000850&pageindex=1')
r=re.findall('<div class="count">((?:.|n)*?)<',str(response.content))
print(r[0].encode("raw_unicode_escape").decode("utf-8"))
print(type(r[0]))
print('xe7x9bxb8xe5x85xb3xe7xbbx93xe6x9ex9cxe7xbaxa60xe4xb8xaa'.encode("raw_unicode_escape").decode("utf-8"))

结果是

\xe7\x9b\xb8\xe5\x85\xb3\xe7\xbb\x93\xe6\x9e\x9c\xe7\xba\xa60\xe4\xb8\xaa
相关结果约0个

为啥这个r[0]就不能直接变成这种格式啊

###

闲着没事找了一下,真找到了个方法??

r[0] = ...
// 此处使用 latin1 和 raw_unicode_escape 编码效果相同
bytes(r[0], 'utf-8').decode('unicode_escape').encode('latin1').decode('utf-8')
>>> '相关结果约0个'

题主转不了的原因是因为在使用正则表达式时,使用了 ...,str(response.content)) 从而导致后续的操作实际上是在对普通的字符串 '\\xe7\\x9b\\xb8...' 进行转换(注意这里有 \\ 转义符出现了)。

而在直接执行 '\xe7\x9b\xb8...\xaa'.encode(.... 时实际上是对十六进制的字符串(这个描述可能不太准确)进行了转换。

In [1]: a = '\xe7\x9b\xb8\xe5\x85\xb3\xe7\xbb\x93\xe6\x9e\x9c\xe7\xba\xa60\xe4\xb8\xaa'
In [2]: a
Out[2]: '?\x9b??\x853??\x93?\x9e\x9c?o|0??a'

In [3]: b = '\\xe7\\x9b\\xb8\\xe5\\x85\\xb3\\xe7\\xbb\\x93\\xe6\\x9e\\x9c\\xe7\\xba\\xa60\\xe4\\xb8\\xaa'
In [4]: b
Out[4]: '\\xe7\\x9b\\xb8\\xe5\\x85\\xb3\\xe7\\xbb\\x93\\xe6\\x9e\\x9c\\xe7\\xba\\xa60\\xe4\\xb8\\xaa'

In [5]: c = bytes(b, 'utf-8').decode('unicode_escape')
In [6]: c
Out[6]: '?\x9b??\x853??\x93?\x9e\x9c?o|0??a'

In [7]: c == a
In [7]: True

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器