接口返回一长串 iVBORw0KGgo 开头的字符,前端要还原成图片;拿到个 JWT 想看 payload 里到底写了啥。这些都是 base64解析的活儿,原理是把二进制按 6 位一组,映射成 64 个可见字符,末尾用 = 补位。
浏览器里两行搞定
atob('aGVsbG8='); btoa('hello');atob 负责解码,btoa 负责编码。注意这俩只认 Latin1 字符,中文直接丢进去会报错,通用做法是编码前先过 encodeURIComponent,解码后再 decodeURIComponent 还原,最常见的中文乱码问题就出在这一步没做。
图片和后端场景
data:image/png;base64, 开头的串,逗号后面才是正文,atob 解出来是二进制字符串,要落成文件就转成 Uint8Array 再包一层 Blob。后端写法对应着来:Node 用 Buffer.from(str, 'base64'),Python 用 base64.b64decode,遇到 URL 安全变体里的 - 和 _ 要传 altchars 参数,Java 用 Base64.getDecoder 同样一行的事。
base64解析失败的四个原因
- 长度不是 4 的倍数:标准的 = 填充符可能被传输环节吃掉了,手动补齐。
- 混进换行和空格:从邮件、PDF 里复制出来的串常有,先清洗再解。
- URL 场景用了标准字符集:+ 会被当空格、/ 在路径里有歧义,要换成 - 和 _ 的变体。
- 解出来乱码但没报错:多半是编码层的问题,回到 UTF-8 还原那一步查。
提醒一句:base64 是编码不是加密,抓包工具里一眼就能还原,别拿它藏密码。