我正在接收压缩文件的内容(从API)作为Base64 64编码的字符串。
如果我把这个字符串粘贴到Notepad++中
插件> MIME工具> Base64解码
并将其保存为test.zip
,它将成为一个有效的压缩文件,我可以打开它。
现在,我正试图在in JavaScript中实现同样的目标。
我尝试过atob()
,可能这里的答案和Mozilla doc的代码中提到的所有东西。
atob
生成类似的内容,但有些字符被不同的解码(因此成为无效的zip文件)。其他方法引发无效的URI错误。
如何在Notepad++中复制JavaScript行为?
发布于 2019-09-24 07:08:36
window.atob
只适用于UTF-8字符串中的数据解码.任何不能用UTF-8字符串表示的东西在解码时都不等于它的二进制形式。Javascript最多会尝试将得到的字节编码成UTF-8字符序列.这就是为什么您的zip存档最终变得无效的原因。
你做以下事情的那一刻:
var data = window.atob(encoded_data)
..。在变量data
引用的UTF-8字符串中,数据有不同的表示形式。
您应该将二进制数据直接解码到ArrayBuffer
。而window.atob
并不适合这样做。
这里是一个可以将base64编码的数据直接转换成ArrayBuffer
的函数。
发布于 2022-09-06 12:48:17
如前所述,不要直接使用atob解码Base64编码的zip文件。您可以使用https://stackoverflow.com/a/21797381/3508516中提到的这个函数。
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;
}
https://stackoverflow.com/questions/58074387
复制相似问题