js atob实现
atob 函数的基本用法
atob 是 JavaScript 中的一个全局函数,用于解码 Base64 编码的字符串。它接受一个 Base64 编码的字符串作为参数,返回解码后的原始字符串。
const encodedStr = 'SGVsbG8gV29ybGQh'; // Base64 编码的 "Hello World!"
const decodedStr = atob(encodedStr);
console.log(decodedStr); // 输出: "Hello World!"
处理非 ASCII 字符
atob 和 btoa 在处理非 ASCII 字符时可能会出现问题。为了解决这个问题,可以使用 encodeURIComponent 和 decodeURIComponent 进行转义。

const originalStr = '你好,世界!';
const encodedStr = btoa(encodeURIComponent(originalStr));
const decodedStr = decodeURIComponent(atob(encodedStr));
console.log(decodedStr); // 输出: "你好,世界!"
替代方案:Buffer(Node.js 环境)
在 Node.js 环境中,可以使用 Buffer 类来实现 Base64 编解码。

const encodedStr = Buffer.from('Hello World!', 'utf8').toString('base64');
console.log(encodedStr); // 输出: "SGVsbG8gV29ybGQh"
const decodedStr = Buffer.from(encodedStr, 'base64').toString('utf8');
console.log(decodedStr); // 输出: "Hello World!"
替代方案:TextEncoder 和 TextDecoder(浏览器环境)
现代浏览器支持 TextEncoder 和 TextDecoder API,可以用于处理 Base64 编解码。
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const originalStr = 'Hello World!';
const encodedStr = btoa(String.fromCharCode(...encoder.encode(originalStr)));
console.log(encodedStr); // 输出: "SGVsbG8gV29ybGQh"
const decodedStr = decoder.decode(new Uint8Array([...atob(encodedStr)].map(c => c.charCodeAt(0))));
console.log(decodedStr); // 输出: "Hello World!"
注意事项
atob 和 btoa 是浏览器环境中的全局函数,但在 Node.js 中不可用。在 Node.js 中需要使用 Buffer 或其他替代方案。
Base64 编码会增加数据大小约 33%,因此不适合用于大量数据的编码。






