Node.js 如何做 Base64 编码和解码?

Node.js 用内置 Buffer 做 Base64:编码 Buffer.from(str).toString('base64'),解码 Buffer.from(str,'base64').toString('utf8')。本文含字符串、二进制文件、URL 安全变体的完整写法。

最佳实践
Node.js 事件循环与异步任务示意

**编码:Buffer.from(str).toString('base64');解码:Buffer.from(str, 'base64').toString('utf8')。**无需任何依赖。

字符串编码/解码

// 编码
const original = 'Hello,这是一段要编码的文本!';
const base64 = Buffer.from(original, 'utf8').toString('base64');
console.log(base64);

// 解码
const decoded = Buffer.from(base64, 'base64').toString('utf8');
console.log(decoded);

中文必须显式处理 UTF-8:Buffer.from(str) 默认就是 UTF-8,但解码时如果不写 'utf8' 参数在某些场景会得到二进制 Buffer 再转字符串出错,养成显式指定的习惯。

文件的 Base64

const fs = require('fs');

// 文件 → Base64(如图片转 data URI)
const fileBuffer = fs.readFileSync('photo.png');
const base64File = fileBuffer.toString('base64');
const dataUri = `data:image/png;base64,${base64File}`;

// Base64 → 文件
fs.writeFileSync('copy.png', Buffer.from(base64File, 'base64'));

URL 安全的 Base64(Base64URL)

标准 Base64 含 +、/、=,放进 URL 会出问题。Node 20 直接支持 base64url:

const urlSafe = Buffer.from('hello').toString('base64url');
const back = Buffer.from(urlSafe, 'base64url').toString();

老版本手动替换:.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'')。

常见坑

  • Base64 不是加密——只是编码,任何人都能解码,别拿它藏密码;
  • 大文件整体转 Base64 会把数据全装进内存且体积膨胀约 33%,超大文件考虑流式处理;
  • 解码非法字符串不会报错而是静默产生乱码,对外部输入要先校验格式。

常见问题(FAQ)

Q:浏览器端的 btoa/atob 在 Node 里能用吗?
Node 16+ 全局可用 btoa/atob,但它们只支持 Latin-1 字符,中文直接报错——用 Buffer 才是正道。

Q:Base64 编码后体积多大?
每 3 字节变 4 字节,膨胀约 33%。

Q:JWT 里的 Base64 为什么和我编码出来的不一样?
JWT 用的是 Base64URL 变体(-/_ 替换 +//,去掉 = 填充),用 base64url 编码即可对齐。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台