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/