JavaScript atob 与 Notepad++ Base64 解码不同

Axi*_*ili 1 javascript base64

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

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

插件 > MIME 工具 > Base64 解码

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

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

我已经尝试过atob(),可能这里的答案中提到的所有内容以及Mozilla 文档中的代码

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

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

Cha*_*lie 5

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

当您执行以下操作时:

var data = window.atob(encoded_data)
Run Code Online (Sandbox Code Playgroud)

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

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

是一个可以将 Base64 编码数据直接转换为ArrayBuffer.