我正在使用https://developer.mozilla.org/en-US/Add-ons/Code_snippets/StringView
进行一些base64转换。我发现有一个错误,但我不知道如何解决它。
在我的测试中,如果我这样做
var name = new StringView("ZipFile.zip").toBase64();
console.log("Original Text = " + StringView.makeFromBase64(name));
我没有收到我原来的文字 - 我得到了“ZipFile.zi”
我认为库正在计算填充错误,但我不确定如何解决它 - 方法bytesToBase64()
为此输入生成一个字符串WmlwRmlsZS56aXAA
然后有一个正则表达式预测替换当正确的值应为WmlwRmlsZS56aX==
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.replace(/ A(?= A $ | $)/ g,“=”);不应该是全球性的-i.e. sB64Enc.replace(/ A(?= A $ | $)/,“=”);