【问题标题】:JavaScript atob is different than Notepad++ Base64 DecodeJavaScript atob 与 Notepad++ Base64 解码不同
【发布时间】:2020-01-24 05:29:42
【问题描述】:

我正在接收作为 Base64 编码字符串的 zip 文件的内容(来自 API)。

如果我将该字符串粘贴到 Notepad++ 中并转到

插件 > MIME 工具 > Base64 解码

并将其保存为test.zip,它成为一个有效的zip文件,我可以打开它。

现在,我正在尝试在 JavaScript 中实现相同的目标。

我已经尝试过atob(),可能还有the answers herethe code from Mozilla doc 中提到的所有内容。

atob 产生类似的内容,但某些字符的解码方式不同(因此成为无效的 zip 文件)。其他方法抛出无效的 URI 错误。

如何在 JavaScript 中重现 Notepad++ 行为?

【问题讨论】:

标签: javascript base64


【解决方案1】:

window.atob 仅适用于解码适合 UTF-8 字符串的数据。任何无法以 UTF-8 字符串表示的内容在解码时都将不等于其二进制形式。 Javascript 最多会尝试将结果字节编码为 UTF-8 字符序列。这就是您的 zip 存档最终无效的原因。

您执行以下操作的那一刻:

var data = window.atob(encoded_data)

...您在 UTF-8 字符串中使用不同的数据表示形式,该字符串由变量 data 引用。

您应该将二进制数据直接解码为ArrayBuffer。而window.atob 不适合这个。

Here 是一个可以将 base64 编码数据直接转换为ArrayBuffer 的函数。

【讨论】:

  • 太棒了!我花了一整天的时间寻找这个,非常感谢!
猜你喜欢
  • 2018-12-14
  • 2018-04-16
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2013-03-20
  • 2017-08-13
相关资源
最近更新 更多