首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript atob与Notepad++ Base64解码不同

JavaScript atob与Notepad++ Base64解码不同
EN

Stack Overflow用户
提问于 2019-09-24 06:37:51
回答 2查看 520关注 0票数 1

我正在接收压缩文件的内容(从API)作为Base64 64编码的字符串。

如果我把这个字符串粘贴到Notepad++中

插件> MIME工具> Base64解码

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

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

我尝试过atob(),可能这里的答案Mozilla doc的代码中提到的所有东西。

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

如何在Notepad++中复制JavaScript行为?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-24 07:08:36

window.atob只适用于UTF-8字符串中的数据解码.任何不能用UTF-8字符串表示的东西在解码时都不等于它的二进制形式。Javascript最多会尝试将得到的字节编码成UTF-8字符序列.这就是为什么您的zip存档最终变得无效的原因。

你做以下事情的那一刻:

代码语言:javascript
运行
复制
var data = window.atob(encoded_data)

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

您应该将二进制数据直接解码到ArrayBuffer。而window.atob并不适合这样做。

这里是一个可以将base64编码的数据直接转换成ArrayBuffer的函数。

票数 5
EN

Stack Overflow用户

发布于 2022-09-06 12:48:17

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

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58074387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档