requests:json请求中中文乱码处理

Posted 木子1015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests:json请求中中文乱码处理相关的知识,希望对你有一定的参考价值。

 

  最近收到一个问题:json格式请求数据中有中文,导致服务端签名失败。

问题详情:

一位同学在发送json格式的post请求时,请求数据中有中文内容:

{"inputCodes":["6932608700850"],"terminal":{"status":1,"channel":"D002","storeCode":"2107","passage":"D002","storeName":"重百超市黄泥塝店","identity":"","maxProductCount":5,"posId":"D002"}}
header={"client_id":"DataSync","sign":"46BA170CFC30C571358E59EDDA63B506","Content-Type":"application/json;charset=UTF-8"}

 

在使用requests库的post请求发送出去之后,服务端收到的不是中文,导致签名失败,数据如下:

{"terminal": {"status": 1, "channel": "D002", "identity": "", "passage": "D002", "maxProductCount": 5, "posId": "D002", "storeName": "\\\\u91cd\\\\u767e\\\\u8d85\\\\u5e02\\\\u9ec4\\\\u6ce5\\\\u585d\\\\u5e97", "storeCode": "2107"}, "inputCodes": ["6932608700850"]}

希望在服务端中收到的数据中,中文仍然是中文,因为有些服务端并没有此做处理。

 

解决方法:

requests库中,在处理json格式的请求时调用的json.dumps方法参数ensure_ascii默认为True.表示序列化时对中文默认使用的ascii编码。

如果想要显示中文,则将此参数的值改为False即可。

 

源码修改:

在requests源码的models.py文件中,找到prepare_body函数。找到如下图中的代码,在comlexjson.dumps(json)里加个参数ensure_ascii=False.

 

保存源码的修改之后,再次运行,在服务器端就能看到中文啦。

 

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/Simple-Small,谢谢!!******* 

以上是关于requests:json请求中中文乱码处理的主要内容,如果未能解决你的问题,请参考以下文章

python requests请求返回结果中文乱码处理

Request_获取请求参数通用方式演示和Request_获取请求参数中文乱码问题处理

处理request接收参数的中文乱码的问题:

Servlet处理中文乱码问题(请求/响应)

Servlet处理get请求时的中文乱码问题

httpclient工具类,post请求发送json字符串参数,中文乱码处理