Base64 编码原理与 JavaScript 实现
Base64 编码的原理是什么?如何使用 btoa/atob 进行编码解码?它们对中文和二进制数据有何限制?如何处理非 ASCII 字符?
回答
我是大山
原理: 3 字节(24bit)分为 4 组 6bit,对应 A-Z a-z 0-9 + /,不足 3 字节补 =。btoa('Hello') -> 'SGVsbG8=',atob('SGVsbG8=') -> 'Hello'。限制: 只支持 Latin-1(0-255),中文会报错。处理中文: btoa(String.fromCharCode(...new TextEncoder().encode('中文')))。解码: new TextDecoder().decode(Uint8Array.from(atob(s), c=>c.charCodeAt(0)))。URL safe: 用 - 和 _ 替代 + 和 /。注意: Base64 比原始数据大约 33%。