修复此Mozilla Base64字节编码器



我正在使用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上发布。

最新更新