JavaScript atob 与 Notepad++ Base64 解码不同
Posted
技术标签:
【中文标题】JavaScript atob 与 Notepad++ Base64 解码不同【英文标题】:JavaScript atob is different than Notepad++ Base64 Decode 【发布时间】:2020-01-24 05:29:42 【问题描述】:我正在接收作为 Base64 编码字符串的 zip 文件的内容(来自 API)。
如果我将该字符串粘贴到 Notepad++ 中并转到
插件 > MIME 工具 > Base64 解码
并将其保存为test.zip
,它成为一个有效的zip文件,我可以打开它。
现在,我正在尝试在 JavaScript 中实现相同的目标。
我已经尝试过atob()
,可能还有the answers here 和the code from Mozilla doc 中提到的所有内容。
atob
产生类似的内容,但某些字符的解码方式不同(因此成为无效的 zip 文件)。其他方法抛出无效的 URI 错误。
如何在 javascript 中重现 Notepad++ 行为?
【问题讨论】:
如何将atob()
的输出转换为文件?
@Phil 这是我用来保存文件的:***.com/questions/13405129/…
【参考方案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
的函数。
【讨论】:
太棒了!我花了一整天的时间寻找这个,非常感谢!以上是关于JavaScript atob 与 Notepad++ Base64 解码不同的主要内容,如果未能解决你的问题,请参考以下文章
javascript使用btoa和atob来进行Base64转码和解码
使用Javascript的atob解码base64不能正确解码utf-8字符串
javascript 使用btoa和atob来进行Base64转码和解码