我正在用 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/