我正在使用https://developer.mozilla.org/en-us/add-ond/code_snippets/stringview
进行一些base64转换。在我看来,有一个错误,但我不确定如何修复它。
在我的测试中,如果我做
var name = new StringView("ZipFile.zip").toBase64();
console.log("Original Text = " + StringView.makeFromBase64(name));
我没有收回我的原始文字 - 我得到" zipfile.zi"
我认为库正在计算错误的填充,但是我不确定如何修复它 - 方法bytesToBase64()
为此输入生成一个字符串,该输入是WmlwRmlsZS56aXAA
,然后具有一个Regex LookAhead,替换了最后两个值以给出结果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 $ | $)/," =");
我是图书馆的作者。感谢您报告错误!
该错误现已修复,该代码也已在github上发布。