gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:22:04 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com