浏览器和nodejs上是否有可以将base64字符串转换为utf8字符串的API?

问题描述 投票:0回答:1
const atob = (encodedString) => Buffer.from(encodedString, 'base64').toString('latin1')

是否有可以在nodejs和浏览器中正常使用的API,可以帮助我将base64转换为utf8字符串?

在node.js中,我们可以写:

const base64ToUtf8 = (encodedString) => Buffer.from(encodedString, 'base64').toString('utf8')

我需要使用此功能在node.js和浏览器中处理base64编码的utf8数据-uri。

javascript node.js browser
1个回答
0
投票

此node-js代码读取以base64字符串“ as UTF-8”]编码的数据。请注意,这与将“转换为UTF-8字符串”不同,因为JavaScript仅支持UCS-2和UTF-16字符串。

此nitpick通过了,在浏览器中有许多方法可以执行与此代码相同的操作。

最干净的方法是首先在ArrayBuffer中解码此base64字符串,然后将该ArrayBuffer读取为字符串,就像您的节点代码一样:

const b64 = "wqFIb2xhIG5pw7FvcyE=";
const buf = base64ToBuf(b64);
const txt = new TextDecoder().decode(buf);
console.log(txt);

function base64ToBuf(str) {
  const binStr = atob(str);
  const len = binStr.length;
  const arr = new Uint8Array(len);
  for (let i = 0; i < len; i++) {
    arr[i] = binStr.charCodeAt(i);
  }
  return arr;
}

另一种,代码较短,但暗示着更多的IO是将其fetch作为文本:

const b64 = "wqFIb2xhIG5pw7FvcyE=";
fetch('data:text;base64,' + b64)
  .then(r => r.text())
  .then(txt => console.log(txt));

而且您还可以使用FileReader API的readAsText(),如果您想支持比utf-8更多的编码,这可能很有用。

readAsText()

还有一个新的const b64 = "wqFIb2xhIG5pw7FvcyE="; const blob = base64ToBlob(b64); const reader = new FileReader(); reader.onload = e => { const txt = reader.result; console.log(txt); }; reader.readAsText(blob, "utf8"); function base64ToBlob(str) { const binStr = atob(str); const len = binStr.length; const arr = new Uint8Array(len); for (let i = 0; i < len; i++) { arr[i] = binStr.charCodeAt(i); } return new Blob([arr]); }可以直接转换为utf-8,但是从base64字符串开始,对这条路的兴趣不大。仍然出于好奇:

© www.soinside.com 2019 - 2024. All rights reserved.