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,謝謝!!******* 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM