toolfree

Base64 编码与解码

把文字转成 Base64 再转回来,正确处理中文与 emoji 的 UTF-8 编码,也支援网址安全格式。全部在你的浏览器中执行。

在你的浏览器中运行

Base64 是做什么的

Base64 用 64 个字元重新表示任意字节,让数据能通过只接受文字的系统:电子邮件内文、JSON 字串、 网址、HTML 属性。它是编码,不是加密——任何人都能解回原样。千万不要用它来隐藏任何东西。

代价是体积。每 3 个字节会变成 4 个字元,编码后大约会膨胀 33%。

UTF-8 是多数工具出错的地方

浏览器内建的 btoa 只处理 Latin-1 字码单位,遇到 你好 会直接丢出例外,超过 U+00FF 的字元也会 被破坏。正确的做法是先把文字转成 UTF-8 字节:

// 错误:遇到非 Latin-1 字元会丢出例外
btoa('你好')

// 正确
btoa(String.fromCharCode(...new TextEncoder().encode('你好')))

上面的工具两个方向都这样处理,因此中文、日文与 emoji 都能完整还原。如果解码后出现乱码,代表输入 原本就不是 UTF-8 文字——常见的情况是那其实是二进位文件,而不是文字。

标准格式与网址安全格式

两种字母表编码的是同样的字节,只有三个字元不同。

第 62 个字元第 63 个字元补位
标准(RFC 4648 §4)+/=
网址安全(RFC 4648 §5)-_通常省略

在网址查询字串中 + 会被解析成空格,/ 则会切断路径,所以 JWT 与带签章的网址都采用去掉补位的 网址安全格式。上面的解码器两种都接受,有没有补 = 都可以。

Data URI

Data URI 就是在 Base64 前面加上媒体型别,让小图或字型直接嵌在 CSS 或 HTML 里,不必再发一次请求:

data:image/png;base64,iVBORw0KGgo…

只有真正很小的文件才划算——那 33% 的膨胀每次载入页面都要付一次,而且这些字节无法单独快取。

你的数据只留在这里

编码与解码都在你的浏览器完成,贴上的内容不会上传。这一点值得留意:被贴进线上解码器的 Base64 内容,往往就是权杖与工作阶段 Cookie。