当base64 null后跟一个=时,HTML5数据URI失败?

bea*_*mit 2 javascript base64 google-chrome firefox4 data-uri

我正在用JavaScript做一些非常糟糕的事情,我遇到了一个奇怪的问题.

我正在创建填充静态大小的缓冲区的二进制数据.如果内容未填充缓冲区,则余数将填充空字符.

下一步是转换为base64.

大小(字节)并不总是3的倍数,所以我可能需要在末尾添加填充.缓冲区中的最后一个字节始终为空(实际上,它大约是一个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
Run Code Online (Sandbox Code Playgroud)

我的文件有效,但它们不符合规范.

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

编辑:

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

Gum*_*mbo 5

填充字符=用于填充四个代码字符的倍数.由于每三个字节的输入被映射到四个输出字节,因此许多不是三的倍数的输入字节需要填充(一个字节==的剩余部分需要,两个字节的余数需要=).

在你的情况下,AAAA已经是一个有效的代码字,不需要填充.