繁体   English   中英

JavaScript atob 不同于 Notepad++ Base64 解码

[英]JavaScript atob is different than Notepad++ Base64 Decode

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

如果我将该字符串粘贴到 Notepad++ 和 go

插件 > MIME 工具 > Base64 解码

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

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

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

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

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

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

当您执行以下操作时:

var data = window.atob(encoded_data)

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

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

是一个 function ,它可以将 base64 编码数据直接转换为ArrayBuffer

如前所述,不要直接使用 atob 解码 Base64 编码的 zip 文件。 您可以改用https://stackoverflow.com/a/21797381/3508516中提到的这个 function。

function _base64ToArrayBuffer(base64) {
    var binary_string = window.atob(base64);
    var len = binary_string.length;
        var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes.buffer;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM