javascript - 当 base64 null 后跟 =? 时,HTML5 数据 URI 失败

标签 javascript google-chrome base64 firefox4 data-uri

我正在用 JavaScript 做一些非常邪恶的事情,我遇到了一个奇怪的问题。

我正在创建填充静态大小缓冲区的二进制数据。如果内容没有填满缓冲区,则剩余部分用空字符填充。

下一步是转换为 base64。

大小(字节)并不总是 3 的倍数,因此我可能需要在末尾添加填充。缓冲区中的最后一个字节始终为空(实际上,大约有 1 kb 的空值)。

当我在 Firefox 和 Chrome 上将其转换为 base64 时,当我有一个尾随 '=' 时,我得到一个 ERR_INVALID_URL,但如果我没有,它下载正常。

例如:

var url = "data:application/octet-stream;base64,";

window.open(url + "AAAA"); // works
window.open(url + "AAAA="); // doesn't work
window.open(url + "icw="); // works

我的文件有效,但不符合规范。

这是无效 base64 的原因吗?更重要的是,这是一个错误还是规范的一部分?

编辑:

我发布了一个答案,给出了 Firefox 和 Chrome 之间的一些奇怪之处。有谁知道标准规定了什么?或者它是导致碎片化的那些松散规范之一?如果可能的话,我想要一些明确的东西。

最佳答案

填充字符=用于填充四个代码字符的倍数。由于每三个字节的输入被映射到四个字节的输出,一些不是三的倍数的输入字节需要填充(一个字节的余数需要 == ,两个字节的余数需要 =)。

在你的例子中,AAAA 已经是一个有效的代码字,不需要填充。

关于javascript - 当 base64 null 后跟 =? 时,HTML5 数据 URI 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6238180/

相关文章:

javascript - 使用 JQuery 悬停项目

javascript - 导入模块时无法解析 React

c# - UTF8/UTF16和Base64在编码方面有什么区别

java - 如何从 Java 中的 pfx 获取 PEM Base 64?

javascript - 如何保护 JSON 响应?

javascript - 如何在 Reactjs 中按升序或降序对数据进行排序?

css - 自定义导航栏在 Chrome 中分崩离析。

java - Chrome 不会找到 json 文件的长本地文件路径,而 Windows 资源管理器会找到它

javascript - 如何在后台获取 chrome 扩展内容脚本?

php - AJAX Posts 8 bit Clean?/与 Base64 的关系/替代方案?/它在哪里?