base64转blob为什么要去掉base64中的后两位

以下是网上抄的代码

function dataURLtoBlob(dataurl) {
  const arr = dataurl.split(',');
  //注意base64的最后面中括号和引号是不转译的
  const _arr = arr[1].substring(0, arr[1].length - 2);
  const mime = arr[0].match(/:(.*?);/)[1];
  const bstr = atob(_arr);
  let n = bstr.length
  const u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime
  });
}

其中

//注意base64的最后面中括号和引号是不转译的
const _arr = arr[1].substring(0, arr[1].length - 2);

这两句是什么意思.
自己用的base64中, 最后两位不是括号也不是引号, 而是不确定的两位字符.
已知遇到过的情况有: "==" "I=" "CC"

阅读 3.8k
3 个回答

得看到元数据啥样,说不定就是因为都多带了一个字符

base64 的转码规则决定了原文字节长度除3余1的时候会==补全,余2的时候会=补全,整除的时候就不会有等号了

应该不是去掉等号用的,看注释说是去掉最后面中括号和引号

貌似是元数据包含了中括号和引号?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题