Base64 在线编码解码 & URL 转换器

支持文本 Base64 编解码 (UTF-8 字符集)、URL 编码解码与图片/文件转 Base64 DataURI 相互转换。纯浏览器本地处理,数据不经过服务器,安全私密。

纯本地计算 · 零数据上传
开发者特惠 阿里云官方合作专区

阿里云爆款云服务器 · 开发者上云特惠 99元/年起

2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。

输入文本内容:支持中文 UTF-8、符号与多行
转换结果:

常见编程语言 Base64 编解码实现速查

后端服务与脚本开发中常用的 Base64 原生 API 与经典调用代码。

Python (base64)标准库
import base64

# 编码
encoded = base64.b64encode("你好".encode("utf-8")).decode("utf-8")

# 解码
raw = base64.b64decode(encoded).decode("utf-8")
JavaScript / Node.jsBuffer / Web
// 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("你好")));
Golang (encoding/base64)标准库
import "encoding/base64"

// 标准编码
encoded := base64.StdEncoding.EncodeToString([]byte("你好"))

// 解码
bytes, _ := base64.StdEncoding.DecodeString(encoded)
Java 8+ (java.util.Base64)标准类
import java.util.Base64;
import java.nio.charset.StandardCharsets;

// 编码
String encoded = Base64.getEncoder().encodeToString("你好".getBytes(StandardCharsets.UTF_8));

// 解码
byte[] decoded = Base64.getDecoder().decode(encoded);
PHP内置函数
// 编码
$b64 = base64_encode("你好");

// 解码
$str = base64_decode($b64);
Linux CLI / Bash终端命令
# 编码
echo -n "你好" | base64

# 解码
echo "5L2g5aW9" | base64 -d

常用 Data URI 前缀与 MIME 类型对照

在前端开发、CSS 背景图、邮件模板中内嵌 Base64 资源所需的标准格式头部。

文件类型MIME 媒体类型Data URI 完整前缀典型应用场景
PNG 图片image/pngdata:image/png;base64,透明背景图标、小 Logo
JPEG / JPG 图片image/jpegdata:image/jpeg;base64,相片、高色彩缩略图
SVG 矢量图image/svg+xmldata:image/svg+xml;base64,CSS 无失真矢量图标
WebP 现代图image/webpdata:image/webp;base64,现代网页高压缩图片
PDF 文档application/pdfdata: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 结构中被广泛采用。