zoukankan      html  css  js  c++  java
  • 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.

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

  • 相关阅读:
    开启ecstore隐藏的功能
    对接ECOS框架(含ecstore、ocs、erp等产品)的方法【其他系统请求ecos的api接口】
    shopex 网店系统基于云登录系统的信任登录设置
    怎样获取机器码
    windows 无法连接远程桌面
    ecos框架中data/ 目录下img*文件数量过多的问题
    mac 下brew解决php安装问题
    20140708 总结
    20140705 总结
    bzoj 2751
  • 原文地址:https://www.cnblogs.com/Simple-Small/p/10006580.html
Copyright © 2011-2022 走看看