跳转到主要内容
CuteJSON
↑↓ 导航 Enter 选择 Esc 关闭

如何对JSON进行Base64编码而不因重音符号或表情符号而出错

发布 1 分钟阅读 作者 Akash Kinkar Pandey

Base64 存在的意义是将字节数据通过只处理文本的通道传输,因此它出现在 数据URL、邮件附件、JSON Web Token以及任何需要在单个字符串值中保存 整个文档的配置格式中。

大多数浏览器 Base64 工具存在的 bug

浏览器内置的 btoa 函数拒绝任何超过 U+00FF 码位的字符。一旦你的 JSON 包含重音字母、货币符号或表情符号,btoa 就会抛出错误,这就是为什么 许多快速 Base64 工具在真实文本接触它们时立即崩溃。

使用 JSON 到 Base64 转换器

此工具先编码为 UTF-8 字节,这是所有其他语言和所有服务器的做法,因此 结果与后端对同一文档生成的结果一致。编码

{"name":"café","price":"₹500","clef":"𝄞"}

生成的 Base64 字符串通过浏览器自身的标准 atob 和 TextDecoder 解码后,可以恢复为完全相同的原始文档:café、₹500 和音乐符号 𝄞 全部保留,包括最后一个字符,它在 JavaScript 中需要代理对, 在 UTF-8 中需要四个字节。

三种失败,加以区分

解码可能以三种真正不同的方式出错,将它们全部笼统地称为“无效输入” 会掩盖你实际看到的是哪一种:

  1. 完全不是 Base64。 Base64 字母表之外的字符会被直接点名: This is not Base64: "!" is not a Base64 character,并显示位置。
  2. 有效的 Base64,但字节不是文本。 字符串作为字节解码正常, 但这些字节不是有效的 UTF-8,通常意味着你有的是二进制文件的 Base64 而不是文档的。
  3. 有效文本,但不是 JSON。 Base64 完美解码为一个字符串,而该 字符串不是 JSON 文档,使用格式化器和验证器对损坏 JSON 给出的 同类消息进行报告。

它接受哪些格式

解码允许 data: URL 前缀、Base64 文本中的换行符,以及用 - 和 _ 替代 + 和 / 的 URL 安全字母表。直接粘贴从浏览器网络标签页复制的 数据 URL;前缀会自动去除。

这是加密吗

不是。Base64 是一种编码,不是密码。任何人都可以用任何语言的一行 代码解码它,包括将其粘贴到本工具的反方向中。它的作用是使字节可以 安全地通过纯文本通道传输,而不是对它们保密。

返回所有文章