首页 > 解决方案 > Python 请求:以非 utf-8 编码提交 JSON

问题描述

我必须将数据提交到使用配置了 latin-1 作为表排序规则的 MySQL 服务器的 Web 服务。此 Web 服务接收 JSON 有效负载并将一些数据存储在数据库中。UTF-8 是用于传输的 JSON 数据的正确编码,但 Web 服务未将其正确编码为 latin-1 以保存在数据库中。

因此,当提交像 {'Key': 'ç'} 这样的 JSON 时,Web 服务将其存储为不正确的编码并在网页中显示为

"The value of Key is 'ç'"

我正在寻找解决方法。

我的客户端在 Python 3.5 中,我正在使用Requests库,它使用 urllib3 作为管道。当我向 Requests 提交 dict 时,它使用jsonlib 将其转换为字符串类型,然后 urllib3 将其作为字节提交以通过网络发送请求。

我可以让请求使用 latin-1 编码提交我的 JSON 对象字符串吗?

标签: pythonjsoncharacter-encodingpython-requests

解决方案


有一种方法,可以手动发送json数据:

a = {'Key': 'ç'}
data = json.dumps(a).encode("latin-1")
requests.post(url, data=data)

那么你发送的内容是一个用 . 编码的二进制字符串latin-1。然后您可以从服务器端对其进行解码:

res.body.decode("latin-1")

推荐阅读