日志分析之python编码记录

最近在公司做一个管理系统,其中有一部分功能是需要解析日志,然后根据解析日志的信息再针对相应接口发送请求,对比日志分子中结果和请求后的结果,就是在对比的过程中遇到了问题,这个问题困扰了我两天,所以在此记录一下:

1- 首先说一下问题的原因:

日志分析出来后有一部分响应中是包含中文的,但是中文被编码了,格式如下:{"message":"\xE6\x88\x90\xE5\x8A\x9F"}

这只是响应体中的一部分,那么问题来了,就是在将这部分编码过的数据转成正常的中文的时候无论如何也转不过去,我是使用的python3,开发使用的windows系统,在开发的时候使用:"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape").decode()是可以正常将此编码转成中文的:

"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape")这一步会将"\xE6\x88\x90\xE5\x8A\x9F"转换为b"\xE6\x88\x90\xE5\x8A\x9F",然后调用decode()方法正常转码为中文,没有问题,但是放在服务器上的时候,"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape")将"\xE6\x88\x90\xE5\x8A\x9F"转换为b"\\xE6\\x88\\x90\\xE5\\x8A\\x9F",这个时候再调用decode的时候,转码错误,后来经过查阅资料,又不断的尝试各种方法,终于找到了一种可行的方式,就是先将"\xE6\x88\x90\xE5\x8A\x9F"中的"\x"替换为"%",那么要编码的字符就被替换成了"%E6%88%90%E5%8A%9F",然后再使用urllib.parse.unquote("%E6%88%90%E5%8A%9F")方法就可以成功了,还有两个小问题是使用json.loads的时候被转换的字符中不能包含"\",使用eval方法转换时被编码的字符中不能包含false,true,null等,否则会报错

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章