私はhttps://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringViewこのmozillaベース64バイトエンコーダを修正しました
を使用して、いくつかのbase64変換を行っています。私にはバグがありますが、それを修正する方法がわかりません。私がしなければ私のテストで
、
var name = new StringView("ZipFile.zip").toBase64();
console.log("Original Text = " + StringView.makeFromBase64(name));
私は私の元のテキストを取り戻すしていない - 私は "ZipFile.zi" を取得
私は図書館はパディングが間違って計算されると思いますが、Iそれを修正するかどうかはわからないよ -WmlwRmlsZS56aXAA
あり、この入力のための文字列を生成し
bytesToBase64()
方法をして、正しい値であるべき時に結果
WmlwRmlsZS56aX==
を与えるために、最後の2つの値を置き換える正規表現の先読みを持って
WmlwRmlsZS56aXA=
は、以下の機能をエンコードしている - 最後に正規表現で:
/* Base64 string to array encoding */
StringView.bytesToBase64 = function (aBytes) {
var sB64Enc = "";
for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {
nMod3 = nIdx % 3;
nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);
if (nMod3 === 2 || aBytes.length - nIdx === 1) {
sB64Enc += String.fromCharCode(StringView.uint6ToB64(nUint24 >>> 18 & 63), StringView.uint6ToB64(nUint24 >>> 12 & 63), StringView.uint6ToB64(nUint24 >>> 6 & 63), StringView.uint6ToB64(nUint24 & 63));
nUint24 = 0;
}
}
return sB64Enc.replace(/A(?=A$|$)/g, "=");
};
私は問題を解決する方法を見つけ出すことを試みたが、私はそれが正規表現であればわからない、または途中エンコーディングことライブラリはsB64Enc値を生成する前にsB64Enc値を生成しています。
問題は、sB64Enc.replace(/ A(?= A $ | $)/ g、 "=");グローバルにするべきではありません。 sB64Enc.replace(/ A(?= A $ | $)/、 "=");
バグを報告しました:https://bugzilla.mozilla.org/show_bug.cgi?id=1298724 – Anri
ありがとうございました!私はバグを報告しませんでした。なぜなら、これは文字通りウェブページからのコピー/ペーストモジュールです(それは、より公式にするために時間を費やしていないようです) – Derek
第三者の貢献であること。 Btw私はTextEncoder TextDecoderを使ってこの影の代わりにBuffer fallbackを使いました:-D https://github.com/feross/buffer – Anri