python - 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 时,它使用json
lib 将其转换为字符串类型,然后 urllib3 将其作为字节提交以通过网络发送请求。
我可以让请求使用 latin-1 编码提交我的 JSON 对象字符串吗?
解决方案
有一种方法,可以手动发送json数据:
a = {'Key': 'ç'}
data = json.dumps(a).encode("latin-1")
requests.post(url, data=data)
那么你发送的内容是一个用 . 编码的二进制字符串latin-1
。然后您可以从服务器端对其进行解码:
res.body.decode("latin-1")
推荐阅读
- java - 使用 FileWriter 编写 java 类并创建生成类的实例
- php - 将编码 md5 vb.net 更改为 php
- c# - 在 c# 中是否有 Delphi 的“stored = false”属性子句的等价物
- google-plus - 是否仍然可以在 Google+ 中呈现带有描述的全出血预览?
- c# - 使用 C# selenium web 驱动程序从 excel 读取数据时出现异常
- postgis - 为什么我的图像马赛克中的自定义维度在 geoserver getmap 请求中不起作用?
- android - 活动恢复时 RecyclerView 返回 null
- android - 我的蓝牙应用程序无法正常工作,只有在打开我的蓝牙设置活动后才能工作
- c - 将 C 程序转换为 nasm 程序集 x86
- pagespeed - Pagespeed Insight 和 GTmetrix 之间的 FCP 和 DLC 差异