javascript - 在 Python 中解码从 JavaScript 生成的 base64 编码 JSON 字符串
问题描述
JSON.stringify
使用和从 JavaScript 生成这个 base64 编码的 JSON 字符串btoa
:
btoa(JSON.stringify({"é": "è"}))
"eyLpIjoi6CJ9"
我正在尝试从 Python 解码它。我正在做:
>>> import base64
>>> import json
>>> json.loads(base64.b64decode("eyLpIjoi6CJ9"))
我得到一个UnicodeDecodeError
:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2: invalid continuation byte
在 Python 中正确解码的正确方法是什么?
注意:我使用的是 base64 编码,因此可以安全地将其作为 URL 查询字符串参数传递。
谢谢!
解决方案
你也可以用 JavaScript
btoa(unescape(encodeURIComponent(JSON.stringify({"é": "è"}))))
base64 output: eyLDqSI6IsOoIn0=
尽管我认为 btoa 仅适用于扩展的 ascii 表,而不适用于所有 unicode 字符。
然后在 Python 中
json.loads(base64.b64decode("eyLDqSI6IsOoIn0=")
prints: {'é': 'è'}
推荐阅读
- apache-kafka - 当处理每条消息需要很长时间时,具有 6 个 Kafka 消费者的最大吞吐量策略
- huggingface-transformers - Transformer-XL:语言建模的输入和标签
- pine-script - 如何通过检查蜡烛 [1] 的信号将当前蜡烛上的最后一个开盘或收盘绘制为一个圆圈
- java - 底部导航显示在其他片段中
- python - 数字后带有减号的 CSV 文件。“ValueError:无法将字符串转换为浮点数:”
- python - 编辑并写出 pyparser 结果
- python - TypeError: 'list' 和 'int' 的实例之间不支持 '>' 无法用 len(list) 解决
- java - Java ArrayList 子列表给出错误的结果
- vim - 在 vim 中每行一个单词创建一个列表或元组
- c# - 使用 EF6 扩展批量插入子实体