gpt4 book ai didi

python - GAE : Unicode JSON String Not Working in Multipart Post After Blob Upload

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:29 25 4
gpt4 key购买 nike

为了将文件上传到 Google 存储,我向 create_upload_url(redirect_path) 返回的网址发送了多部分 POST 请求。 。 POST 请求包含我需要在 redirect_path 中使用的文件和 JSON 字符串。

如果 JSON 字符串包含 unicode 字符,那么在 GAE 将多部分 POST 请求转发给我后,它就会被破坏。

发送到上传网址的 JSON 字符串:

{"subject": "日文", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAycjkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6ZCQw"}

GAE将请求转发到redirect_path后的JSON字符串

{"subject": "=E6=97=A5=E6=96=87", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAyc=
jkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6Z=
CQw"}

unicode 变得不可读,并且“=”和“换行符”被意外插入。

奇怪的是,带有 unicode 的较短 JSON 字符串工作正常。

{"subject": "日文", "tag_key": ""}.

其他要点,

  1. 该问题仅发生在生产环境中。我无法在本地开发服务器中重现。

  2. 对redirect_path 的多部分POST 请求没有问题。该问题仅在发布到 blobstore.create_upload_url 时发生。

  3. 我使用GAE标准环境、Python、Django、Django Rest框架和Postman进行测试。

如果您想到任何可能的原因,请告诉我。

最佳答案

您的 json 字符串正在使用 quoted-printable encoding 进行编码用于传输,因为它包含非 ASCII 字符。 quopri Python 标准库中的 module 提供了处理此问题的工具:

>>> import quopri
>>> foo = '{"subject": "日文", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAycjkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6ZCQw"}'
>>> encoded = quopri.encodestring(foo)
>>> print encoded
{"subject": "=E6=97=A5=E6=96=87", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAyc=
jkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6Z=
CQw"}

您可以使用quopri.decodestring进行解码以获取原始字符串:

>>> print quopri.decodestring(encoded)
{"subject": "日文", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAycjkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6ZCQw"}

编码是由json字符串中存在非ascii字符触发的;插入换行符是因为可打印引用编码强制行长度为 76 个字符。

您可以通过转义 json 字符串中的非 ascii 字符来完全避免此问题 - 例如 Python 的 json 模块会执行此操作 by default :

If ensure_ascii is true (the default), all non-ASCII characters in the output are escaped with \uXXXX sequences, and the result is a str instance consisting of ASCII characters only.

>>> json.dumps({"subject": "日文", "tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAycjkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6ZCQw"})    

{
"tag_key": "ahNifnN1aXF1aS1kZXYtMTcwMDAycjkLEgRUZWFtIgtzdWlxdWlfdGVzdAwLEgdUYWdUeXBlGICAgICAgIAKDAsSA1RhZxiAgICAgK6ZCQw",
"subject": "\u65e5\u6587"
}

关于python - GAE : Unicode JSON String Not Working in Multipart Post After Blob Upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44715402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com