修复此mozilla base64字节编码器

时间:2016-06-28 20:04:39

标签: javascript base64 mozilla

我正在使用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 $ | $)/,“=”);

1 个答案:

答案 0 :(得分:0)

我是图书馆的作者。感谢您报告错误!

现在出现错误has been fixed,代码也已发布on GitHub

相关问题