关于x开头的字符串编码转换中⽂解决⽅法
做爬⾍可能经常遇到爬取到的数据存在编码问题,简直让⼈头疼,⽐如爬取到的是这样的:
例如:url编码和utf8区别
\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c
中⽂是: 你好世界
上⾯这个是utf-8编码,但数据类型是字符串类型,⽽不是bytes类型的utf-8编码。
这样会导致⼀个结果:如果直接输出,显⽰的是乱码,也不能使⽤decode进⾏utf-8解码得到中⽂。
在python2中,中⽂指定utf-8格式,字符串存⼊内存就是utf-8编码格式,直接输出就是中⽂,就不存在这个问题;
⽽python3中,字符串存⼊内存是以unicode编码格式存⼊的,输出的是默认的utf-8编码格式,所以得到的是乱码。
可能有⼈会说,既然得到的是utf-8编码,在前⾯加上 " b " ,字符串就是bytes类型了,再利⽤decode进
⾏解码不就可以得到中⽂吗?但显然,这是⾏不通的,你不可能去⼿动⼀个个添加,那有没有其他⽅法呢?
答案肯定是有的,既然知道这个字符串是utf-8编码的,那么我换种⽅式,只要将字符串中的 " \x " 改为 " % " 利⽤urllib中的unquote⽅法解码就可以得到中⽂了,因为url中的中⽂utf-8编码和这⾥的区别就是url中编码是%开头。
那么其实只要对utf-8字符串反向转换就⾏,先将字符串编码指定为unicode_escape
s ='\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
s = s.encode('unicode_escape')
得到bytes类型数据(单斜杠变成双斜杠)
b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xe4\\xb8\\x96\\xe7\\x95\\x8c'
接着再对bytes类型进⾏utf-8解码,得到字符串,将字符串中的 " \x " 替换为 " % "
ss = s.decode('utf-8').replace('\\x','%')
替换作⽤就是将字符串改为url的utf-8编码格式
%e4%bd%a0%e5%a5%bd%e4%b8%96%e7%95%8c
最后利⽤urllib中的unquote⽅法将url编码解码,得到中⽂
un = parse.unquote(ss)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论