Skip to content
encode

什么是 Base64 编码

Base64 是一种把二进制数据转换成纯文本的编码方式。它用 64 个可打印 ASCII 字符来表示任意字节序列,最早出现在 MIME 邮件协议里,目的是让二进制附件能安全通过只支持文本的通道传输。

这 64 个字符构成一张固定的码表:

| 取值 | 字符范围 | 数量 | |------|----------|------| | 0-25 | A-Z | 26 | | 26-51 | a-z | 26 | | 52-61 | 0-9 | 10 | | 62 | + | 1 | | 63 | / | 1 |

额外还有一个 = 字符,只用于末尾的填充(padding),不算在这 64 个里。

Base64 编码原理

Base64 把输入字节每 3 个一组(共 24 bit),拆成 4 个 6-bit 段。每个 6-bit 段对应码表里的一个字符,所以 3 字节最终变成 4 个字符。

以 ASCII 字符串 Man 为例:

原始字节:     M(77)      a(97)      n(110)
二进制:       01001101   01100001   01101110
按 6-bit 分组: 010011  010110  000101  101110
对应十进制:       19      22       5      46
查表结果:         T       W       F       u

最终编码结果是 TWFu

当输入字节数不是 3 的倍数时,需要填充:

  • 多 1 个字节(共 1 字节):补 4 个 0 bit,编码出 2 个字符,再加两个 =, 形如 XX==
  • 多 2 个字节(共 2 字节):补 2 个 0 bit,编码出 3 个字符,再加一个 =, 形如 XXX=

所以你经常会在 Base64 字符串末尾看到一到两个 =,这是正常的填充标记。

中文和 Emoji 的处理

Base64 编码的对象是字节,不是字符。中文、Emoji 这类字符在 UTF-8 下会占多个字节(一个汉字通常 3 字节,一个 Emoji 可能 4 字节)。

正确做法是先把字符串按 UTF-8 编码成字节序列,再对字节做 Base64。很多旧工具会跳过这一步,直接把每个字符当作单字节处理,结果中文全变成 \uXXXX 形式的乱码,或者直接报错。

终端里用 UTF-8 locale 时,下面的命令能正确编码中文:

echo -n "你好" | base64
# 输出: 5ZG95ZG9

解码再转回 UTF-8 也不会丢字:

echo "5ZG95ZG9" | base64 -d
# 输出: 你好

DevToolkit Pro 的 Base64 工具内部走的是 UTF-8 字节路径,中文、日文、Emoji 都能正确往返。

URL 安全 Base64

标准 Base64 里有 +/ 两个字符,放在 URL 或文件名里会被当成特殊符号,导致解析出错。于是有了 URL 安全 Base64(也叫 Base64url)变体:

  • - 替换 +
  • _ 替换 /
  • 去掉末尾的 = 填充

| 标准 Base64 | URL 安全 Base64 | |-------------|-----------------| | a+b/c= | a-b_c |

这种变体常见于 JWT(JSON Web Token)的 header 和 payload 部分,也用在 Data URL 和短链接场景。如果你的数据要拼进 URL,一定要用 URL 安全版本。

如何使用在线工具

用 DevToolkit Pro 的 Base64 编解码工具 非常简单:

  1. 打开工具页面
  2. 在输入框粘贴或输入要处理的文本
  3. 选择 编码解码
  4. 结果实时出现在输出区,点复制按钮即可取走

工具全程在浏览器本地运算,数据不会上传到任何服务器,适合处理包含敏感信息的字符串。

FAQ

Base64 是加密吗?

不是。Base64 只是编码,任何人都能解码还原原文,没有任何保密性。它解决的是"怎么让二进制数据安全通过文本通道"的问题,和加密是两回事。需要保密请用 AES 等真正的加密算法。

编码后体积会变化吗?

会变大。Base64 把每 3 字节变成 4 字符,固定膨胀约 33%。所以它不适合用来压缩,只适合用来搬运数据。

为什么我的中文编码后是乱码?

通常是工具没有按 UTF-8 处理字节。换一个支持 Unicode 的工具(比如上面的 Base64 编解码工具)就能解决。判断标准很简单:把"你好"编码后再解码,能不能原样还原。

Base64 能用来存图片吗?

可以。把图片字节做 Base64 编码后嵌进 HTML 或 CSS 的 Data URL 里,能减少一次 HTTP 请求。但体积会涨 33%,大图片不建议这么做。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


← Back to Blog