Base64 在线编码解码 & URL 转换器
支持文本 Base64 编解码 (UTF-8 字符集)、URL 编码解码与图片/文件转 Base64 DataURI 相互转换。纯浏览器本地处理,数据不经过服务器,安全私密。
阿里云爆款云服务器 · 开发者上云特惠 99元/年起
2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。
常见编程语言 Base64 编解码实现速查
后端服务与脚本开发中常用的 Base64 原生 API 与经典调用代码。
import base64
# 编码
encoded = base64.b64encode("你好".encode("utf-8")).decode("utf-8")
# 解码
raw = base64.b64decode(encoded).decode("utf-8")// Node.js Buffer
const b64 = Buffer.from("你好").toString("base64");
const str = Buffer.from(b64, "base64").toString("utf-8");
// 浏览器 Web API (支持 UTF-8)
btoa(unescape(encodeURIComponent("你好")));import "encoding/base64"
// 标准编码
encoded := base64.StdEncoding.EncodeToString([]byte("你好"))
// 解码
bytes, _ := base64.StdEncoding.DecodeString(encoded)import java.util.Base64;
import java.nio.charset.StandardCharsets;
// 编码
String encoded = Base64.getEncoder().encodeToString("你好".getBytes(StandardCharsets.UTF_8));
// 解码
byte[] decoded = Base64.getDecoder().decode(encoded);// 编码
$b64 = base64_encode("你好");
// 解码
$str = base64_decode($b64);# 编码
echo -n "你好" | base64
# 解码
echo "5L2g5aW9" | base64 -d常用 Data URI 前缀与 MIME 类型对照
在前端开发、CSS 背景图、邮件模板中内嵌 Base64 资源所需的标准格式头部。
| 文件类型 | MIME 媒体类型 | Data URI 完整前缀 | 典型应用场景 |
|---|---|---|---|
| PNG 图片 | image/png | data:image/png;base64, | 透明背景图标、小 Logo |
| JPEG / JPG 图片 | image/jpeg | data:image/jpeg;base64, | 相片、高色彩缩略图 |
| SVG 矢量图 | image/svg+xml | data:image/svg+xml;base64, | CSS 无失真矢量图标 |
| WebP 现代图 | image/webp | data:image/webp;base64, | 现代网页高压缩图片 |
| PDF 文档 | application/pdf | data:application/pdf;base64, | 浏览器内嵌 PDF 预览 |
Base64 编解码核心技术问答 (FAQ)
梳理 Base64 编码原理、Padding 等号含义及 URL 安全变体等高频问题。
Q1: 什么是 Base64 编码?它是一种加密算法吗?
Base64 并不是加密算法,而是一种二进制到可打印字符的编码方案。它通过将每 3 个 8-bit 字节(共 24 位)重组为 4 个 6-bit 组,并将每个 6 位数值映射到 64 个可打印 ASCII 字符(A-Z、a-z、0-9、+、/)中。它的设计初衷是为了在仅支持 ASCII 文本的传输协议(如早期邮件 SMTP、URL 传参)中安全传输二进制数据,防止因换行符或特殊字符被网关截断。
Q2: 为什么 Base64 编码末尾有时会有 1 个或 2 个等号 (=)?
等号 = 是 Base64 的填充符 (Padding)。Base64 规定每 3 个输入字节对应 4 个输出字符。如果输入数据的字节数不能被 3 整除:
• 若剩余 1 个字节(8 位):需要补充 4 个零位凑成 2 个 6 位字符,后补 2 个 == 占位;
• 若剩余 2 个字节(16 位):补充 2 个零位凑成 3 个 6 位字符,后补 1 个 = 占位。 解码器根据末尾 = 的数量即可确切还原原始字节数。
Q3: 为什么 Base64 会使数据体积增加约 33%?
由于原始二进制以 8 位为一个字节,而 Base64 仅使用每个输出字符的 6 位有效载荷(\( 2^6 = 64 \))。3 个原始字节(24 bits)需要转换成 4 个 Base64 字符(4 字节,32 bits),体积比例正好为 \( 4/3 \approx 133.3\% \)。因此大文件并不建议直接 Base64 存储或传输。
Q4: 什么是 URL Safe Base64(Base64URL)?
标准 Base64 字符集中包含 + 和 /,这两个字符在 URL 中具有特殊含义(+ 常被当成空格,/ 用于路径分割)。为避免 URL 传参时产生歧义,RFC 4648 定义了 URL Safe Base64:将 + 替换为连字符 -,将 / 替换为下划线 _,并通常省略末尾的填充符 =。这在 JWT (JSON Web Token) 的 Token 结构中被广泛采用。