【问题标题】:Python Requests: submit JSON in non utf-8 encodingPython 请求:以非 utf-8 编码提交 JSON
【发布时间】:2018-05-22 09:40:47
【问题描述】:

我必须将数据提交到使用配置了 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 将其作为 bytes 提交以通过网络发送请求。

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

【问题讨论】:

    标签: python json character-encoding python-requests


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我这里删除了其他的cmets。但我相信写 data = json.dumps(api_json, ensure_ascii=False); requests.post(url, data=data,headers={"Content-Type": "application/json; charset=latin-1"}) 将使其工作
    • 服务器端好像没有控制权?所以你必须传递一个带有latin-1编码的json类型的body?
    • 当然,这就是问题所在。我不控制服务器,必须解决他们的错误。您的提示非常好,比我所遵循的路径简单得多。
    猜你喜欢
    • 2017-04-24
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多