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

标签 javascript node.js browser

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 data-uri。

最佳答案

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

这个挑剔通过了,有很多方法可以在浏览器中执行与此代码相同的操作。

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

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 更多的编码,这可能很有用。

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]);
}

还有新的 Blob.text()它确实直接转换为 utf-8,但是从 base64 字符串转换为 utf-8,人们对走这条路没什么兴趣。还是为了好奇:

const b64 = "wqFIb2xhIG5pw7FvcyE=";
const blob = base64ToBlob(b64);

blob.text().then(txt => console.log(txt));

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]);
}

关于javascript - 浏览器和nodejs上有没有可以将base64字符串转换为utf8字符串的API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59332670/

相关文章:

javascript - 使用 rollupjs、es2015 模块导入

javascript - 查看 html 节点上的所有打开事件 - Javascript

javascript - TypeScript 经常出现问题并且更喜欢 import 而不是 require

css - 粗体的 Roboto 字体是不可见的

javascript - 恢复已被覆盖的内置方法

javascript - 隐藏一个元素并同时更改样式 css

javascript - 路由在 AngularJS 中不起作用

node.js - 如何在 mongoDB 中添加图像?

javascript - Electron webview 仅预加载文件 ://protocol is supported when using create-react-app base

浏览器检测