btoa js实现
Btoa 的 JavaScript 实现
btoa 是 JavaScript 中的一个内置函数,用于将二进制数据(通常是字符串)编码为 Base64 格式。以下是关于 btoa 的实现和使用方法:
基本用法
btoa 函数接受一个字符串作为参数,并返回该字符串的 Base64 编码结果。

const encodedData = btoa('Hello, world!');
console.log(encodedData); // "SGVsbG8sIHdvcmxkIQ=="
处理 Unicode 字符
btoa 只能正确处理 ASCII 字符。如果字符串包含 Unicode 字符(如中文、表情符号等),需要先进行转码。
function utf8ToBase64(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
return String.fromCharCode(parseInt(p1, 16));
}));
}
const encodedUnicode = utf8ToBase64('你好,世界!');
console.log(encodedUnicode); // "5L2g5aW977yM5LiW55WMhQ=="
解码 Base64
使用 atob 函数可以将 Base64 字符串解码为原始字符串。

const decodedData = atob('SGVsbG8sIHdvcmxkIQ==');
console.log(decodedData); // "Hello, world!"
处理 Unicode 解码
如果 Base64 字符串包含 Unicode 字符,解码时需要额外处理。
function base64ToUtf8(str) {
return decodeURIComponent(Array.prototype.map.call(atob(str), (c) => {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
const decodedUnicode = base64ToUtf8('5L2g5aW977yM5LiW55WMhQ==');
console.log(decodedUnicode); // "你好,世界!"
注意事项
btoa和atob是浏览器环境的内置函数,Node.js 中需要使用Buffer替代。- 非 ASCII 字符需要额外转码处理,否则会抛出错误。
- Base64 编码会增加数据体积(约 33%),不适合编码大量数据。
Node.js 中的替代方案
在 Node.js 中,可以使用 Buffer 实现类似功能:
const encodedData = Buffer.from('Hello, world!').toString('base64');
console.log(encodedData); // "SGVsbG8sIHdvcmxkIQ=="
const decodedData = Buffer.from('SGVsbG8sIHdvcmxkIQ==', 'base64').toString();
console.log(decodedData); // "Hello, world!"






