js atob实现
atob 函数的作用
atob 是 JavaScript 中的一个全局函数,用于解码 base64 编码的字符串。它接受一个 base64 编码的字符串作为参数,返回解码后的原始字符串。

基本用法
const encodedString = 'SGVsbG8gV29ybGQh'; // base64 编码的 "Hello World!"
const decodedString = atob(encodedString);
console.log(decodedString); // 输出: "Hello World!"
注意事项
atob 只能解码有效的 base64 字符串。如果传入的字符串包含非 base64 字符,会抛出异常。

try {
const invalidString = 'Hello!'; // 不是有效的 base64
const decoded = atob(invalidString);
} catch (e) {
console.error('解码失败:', e); // 抛出异常
}
兼容性处理
在 Node.js 环境中,atob 不是全局可用的,需要使用 Buffer 来实现相同功能:
// Node.js 中的替代方案
const encodedString = 'SGVsbG8gV29ybGQh';
const decodedString = Buffer.from(encodedString, 'base64').toString('utf8');
console.log(decodedString); // 输出: "Hello World!"
处理 Unicode 字符
atob 对 Unicode 字符支持有限,可能需要额外处理:
// 编码 Unicode 字符串
function encodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
return String.fromCharCode('0x' + p1);
}));
}
// 解码 Unicode 字符串
function decodeUnicode(str) {
return decodeURIComponent(atob(str).split('').map(c => {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
const unicodeStr = '你好';
const encoded = encodeUnicode(unicodeStr);
const decoded = decodeUnicode(encoded);
console.log(decoded); // 输出: "你好"






