跳到正文

Base64 编码解码

Base64 Encoder & Decoder

对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。

把文本或整个文件编码成 Base64,再解回来——包括 data: URI,也包括 JWT 使用的 URL 安全字母表。文本先经过 UTF-8,这正是浏览器内置的 `btoa` 完全做不到的那一步。

🔒 完全在你的浏览器里运行base64encodedecode
模式
字母表

MIME 里那套 +/ 字母表。

文本或文件输入

拖入任意文件

在这个标签页里读取,不上传。

Base64 输出

0个字符的 Base64。

文本会先按 UTF-8 编码再做 Base64,所以中文和表情往返一趟还在。浏览器自带的 btoa 做不到这件事——它对任何超过 U+00FF 的字符直接拒收——所以这里的编码器是自己写的,不是借来的。

怎么用

  1. 输入或拖入你手上的东西

    文本框接受任何文本;拖放区接受任何文件,并分片编码,大文件不会卡死标签页。在编码模式下粘进来的东西如果已经像 Base64,页面会提议切换方向。

  2. 选字母表

    Base64 是 MIME 的 `+/` 字母表。Base64URL 是 `-_` 那一套,放进 URL 路径或 JWT 段的是它。两者不能互换——一种的解码器会拒绝另一种。

  3. 决定填充和折行

    末尾的 `=` 有些解析器要求,而 JWT 里禁止。76 列折行是 MIME 的行长,只在输出要进邮件头或 PEM 形状的文件时才有意义,别处都不需要。

  4. 如果你要的是 data URI,就拿它

    拖入的文件同时会生成带 MIME 类型的 `data:` URI,面板会显示它比原文件大了多少——约三分之一,这个数字决定了内联到底值不值。

常见问题

为什么中文在这里没问题,在别处却乱码?

因为文本在 Base64 之前先编码成了 UTF-8 字节。浏览器里的 `btoa` 遇到任何高于 U+00FF 的字符就抛错,而常见的变通办法——`unescape(encodeURIComponent(…))`——是多数网站在用的,而且悄悄出错。这里的编码器是专门写出来避开这两者的。

Base64 是加密吗?

不是,这一点很重要。它是一种编码——任何人都能解码,包括这个页面。Base64 里的密码或令牌是明摆着的。要保密,本站的文本加密工具用口令做 AES-GCM。

解码输出是空的,但没有报错。

那说明字节解码正常,但不是 UTF-8 文本——一张 PNG、一个 zip、一段 protobuf。这种情况下面板会切换到十六进制预览和一个下载按钮;文本框没有东西可显示,因为根本没有文本。

能编码多大的文件?

编码本身是分块的,不会锁死页面,但结果是一个比文件大三分之一的单个字符串,全部放在内存里。几十 MB 是浏览器标签页开始抱怨的地方,而且那么大的 data: URI 在哪里都没法用。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。