工具

Base64 编解码

编码

UTF-8 安全的 Base64 编码与解码,可选 URL 安全变体。

100% 客户端 无后端
输入
输出
本页内容

什么是 Base64?#

Base64 是一种把任意字节写成纯可打印字符的办法,只用到 64 个 ASCII 字符(A-Za-z0-9+/,外加 = 作填充)。它之所以存在,是因为计算世界里大量通道本来就是按文本设计的——邮件正文、JSON 字段、HTTP 头、data URI 前缀——这些通道一旦撞上原始字节(尤其是高位被置 1 的字节或夹在里面的控制字符)就会出问题。当你需要让一段”二进制形状”的数据穿过一个”只认文本”的通道时,base64 就是那门通用语。

每 3 个输入字节(24 位)会被编成 4 个 base64 字符(每个字符承载 6 位)。这也是为什么 base64 的输出长度永远是 4 的倍数,以及为什么它比原始字节大约长 33%——这份冗余就是”可打印”的代价。当输入长度不是 3 的倍数时,结尾就会出现 1 个或 2 个 = 作为填充。

本页的编码和解码对 UTF-8 安全。这里有个常见坑:直接把字符串丢给 btoa(),只要里面有一个非 ASCII 字符(é、中文、emoji)就会抛 InvalidCharacterError。正确的做法是先把文本按 UTF-8 编码成字节,再 base64——本工具正是这么做的,所以 café 能正确往返,而不会中途报错。

怎么使用#

  1. 用工具栏左上角的 编码 / 解码(Encode / Decode)开关选好方向。
  2. 在左侧 输入 框里输入或粘贴内容。
    • 编码 模式下,输入按 UTF-8 文本处理。
    • 解码 模式下,输入应当是一段 base64 字符串,允许其中夹带空白。
  3. 勾选 URL-safe,如果你需要的是 base64url 字母表(用 -_ 代替 +/,并去掉填充)。JWT 和不少签名 URL 方案用的就是它。
  4. 右侧 输出 框会实时显示结果,点 复制(Copy)即可取走。
  5. 示例(Sample)载入一对演示数据,点 清空(Clear)重置两边。

主要特性#

  • 双向 UTF-8 安全。 编码时先走 TextEncoder,多字节字符不会炸;解码时再走 TextDecoder,原文一字不差地还原。
  • 标准与 URL-safe 两种字母表。 一个复选框在经典 base64(+/=)和 base64url(-_、无填充)之间切换,解码时还会自动补回缺失的填充位。
  • 纯客户端。 转换只在你浏览器里跑——没有后端,不发网络请求。在这里粘贴敏感 token 不会把它送出去。
  • 实时状态栏。 两框下方的状态条会报出编码/解码错误(比如输入里混进了 % 之类、或者被截断了),而不是悄悄吐出一堆乱码。

实例演示#

编码、不勾 URL-safe,ASCII 文本 Hello, World! 的结果是:

SGVsbG8sIFdvcmxkIQ==

结尾那两个 = 说明 13 字节的输入不是 3 的倍数——这很正常,不是错。

只要离开 ASCII,UTF-8 处理的价值就显出来了。编码 café(其中 é 是两个 UTF-8 字节 c3 a9)得到:

Y2Fmw6k=

如果你在控制台里直接 btoa("café"),它会抛错。本工具不会,因为它先做了 UTF-8 字节编码。

URL-safe 模式会改写字母表,让输出里不再出现会被 URL 误读的字符:+-/_,末尾的 = 填充被去掉(解码时自动补回)。拿上面那条标准输出 SGVsbG8sIFdvcmxkIQ== 来说,URL-safe 下那两个填充 = 被去掉,变成 SGVsbG8sIFdvcmxkIQ+//-/_ 的替换只有在这些字符真的出现时才会生效,而它们通常出现在二进制载荷里——哈希摘要、随机 token——恰恰是你最常直接塞进 URL 路径段或查询参数的那种数据。

常见问题#

解码出来的文本是乱码,怎么回事?#

十有八九,你解码的那段 base64,原始字节是用别的字符集(常见的是 Latin-1 或 Windows-1252)编码的,而不是 UTF-8。本工具按 UTF-8 解码字节,所以一个 Latin-1 的 é(单字节 0xe9)不是合法 UTF-8,显示出来就是错的。先搞清楚对方当初是用什么字符集编码的,或者先把原文重新按 UTF-8 编码。

标准 base64 还是 base64url,到底用哪个?#

不进 URL 的场景——邮件附件、data: URI、承载二进制的 JSON 字段——用标准形式(+/=)就好。只要输出要进 URL 的路径、查询串,或者塞进 JWT 段里,+/= 要么会破坏解析、要么会在传输中被改写,这时勾上 URL-safe。解码时两种格式都会被自动识别。

为什么编码出来比我输入的还长?#

这是 base64 的固有特性,不是 bug。每个字符只装 6 位而不是 8 位,所以输出大约是输入的 4/3——差不多 33% 的膨胀。对很短的输入,因为固定结构占比大,看上去还会更长一点。

这个工具能”解密”或”破解”一段 base64 吗?#

不能——base64 是编码,不是加密。它本身设计成完全可逆,也没有密钥,谁拿到字符串都能解开。如果你要的是保密,先用一个带认证的加密方案加密,再把密文 base64 一下方便传输。