私は JavaScript で非常に不潔なことをしており、奇妙な問題に遭遇しました。
静的サイズのバッファーを満たすバイナリ データを作成しています。内容がバッファを満たさない場合、残りはヌル文字で埋められます。
次のステップは、base64 に変換することです。
サイズ (バイト) は常に 3 の倍数であるとは限らないため、最後にパディングを追加する必要がある場合があります。バッファー内の最後のバイトは常に null です (実際には、約 1 KB の null です)。
これを 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 の間のいくつかの奇妙な点を示す回答を投稿しました。標準が何を指定しているか知っている人はいますか? それとも、断片化を引き起こす緩い仕様の 1 つですか? できれば決定的なものが欲しいです。