【发布时间】:2011-06-04 17:09:25
【问题描述】:
我正在用 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
我的文件有效,但不符合规范。
这是无效的 base64 有什么原因吗?更重要的是,这是一个错误还是规范的一部分?
编辑:
我发布了一个答案,给出了 Firefox 和 Chrome 之间的一些奇怪之处。有谁知道标准规定了什么?或者它是那些导致碎片化的松散规范之一?如果可能的话,我想要一些确定的东西。
【问题讨论】:
-
我添加了另一个有效的东西(带等号的非空字符串)。
-
哇,关于数据 URL 和编码,肯定有很多令人困惑和矛盾的信息。
标签: javascript google-chrome base64 firefox4 data-uri