\x16进制格式的utf-8编码如何解析

\x16进制格式的utf-8编码如何解析

问题描述

有个铁儿,遇到这么一段话,想解析,但是有点蒙

\n\xe5\xb7\xb2\xe8\x8e\xb7\xe5\x8f\x964\xe6\x9d\xa1\xe6\x95\xb0\xe6\x8d\xae\xe8\xaf\xa6\xe6\x83\x85\xef\xbc\x9b\xe5\x8e\xbb\xe9\x87\x8d\xe5\x90\x8e\xe5\x85\xa5\xe5\xba\x93\xe5\xae\x8c\xe6\xaf\x952\xe6\x9d\xa1\xe6\x95\xb0\xe6\x8d\xae----------------------------------------------------------------------------\n\xe2\x98\x85

上面这个是utf-8编码,但数据类型是字符串类型,而不是bytes类型的utf-8编码。

这样会导致一个结果:如果直接输出,显示的是乱码,也不能使用decode进行utf-8解码得到中文。

在python2中,中文指定utf-8格式,字符串存入内存就是utf-8编码格式,直接输出就是中文,就不存在这个问题;

而python3中,字符串存入内存是以unicode编码格式存入的,输出的是默认的utf-8编码格式,所以得到的是乱码。

可能有人会说,既然得到的是utf-8编码,在前面加上 " b " ,字符串就是bytes类型了,再利用decode进行解码不就可以得到中文吗?但显然,这是行不通的,你不可能去手动一个个添加,那有没有其他方法呢?

解决方法 利用urllib中的unquote方法进行解析

众所周知,URL中出现中文的时候,也是用的utf-8编码,只不过他的起始符号为%只要将字符串中的 \x 改为 % 利用urllib中的unquote方法解码就可以得到中文了。

from urllib import parse
un = parse.unquote(s.encode('unicode_escape').decode('utf-8').replace('\\x', '%'))
print(un)

运行得到如下结果:

\n已获取4条数据详情;去重后入库完毕2条数据----------------------------------------------------------------------------\n★

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注