python的xml格式response中文乱码问题及解决方法

本文给出了python post得到的gbk编码的xml响应报文出现中文乱码问题的一种解决方法。

头秃了两个星期终于解决了,要发的是一个gbk编码的xml报文,然后响应报文也是gbk编码,一开始是用的requests库的post方法res=requests.post(url,body.encode("gbk")),返回的结果是一个requests.models.Response对象,但是无论对结果怎么encode和decode,都没法显示中文,直接输出res.text的话就只能返回中文乱码。在大家都用utf-8编码的时候,网上只能找到一堆无用的资料。。

💡如果直接尝试转化的话会报类似'gb2312' codec can't encode character '\xbd' in position 83这样的错误;

💡尝试把xml转化成json再处理的方式也失败了;

💡如果直接解析又会报ValueError: multi-byte encodings are not supported,需要xml头把<?xml version="1.0" encoding="gbk" ?>里改成utf-8才可以……

最后是被这个2011年的代码启发的:➡️DEVOPS
Request, Get Reply and Display XML in Python – Beauty of Simplicity

它这里用的是python2,我最后改完的python3功能函数是这样的:

1
2
3
4
5
6
def interRequest(businessCode, body):
url = CommonConf.url_root + businessCode
result = urllib.request.urlopen(url, data=bytes(body, encoding="gbk"))
res = str(result.read(), encoding="gbk")
res = xmltodict.parse(res)
return res['stream']

传入的body是str,把它转化为bytes,通过urllib.request.urlopen方法提交post请求返回一个HTTPResponse对象,通过它的read方法可以获得bytes,在把bytes转化为str的时候根据gbk编码,就可以成功显示中文了。

以后要是遇见别的编码的接口靠这个方法也可以顺利解决啦~

🌈如果有更优雅的方式欢迎给我发邮件!感谢 !

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 LeFlacon

奶茶一杯 快乐起飞

支付宝
微信