Base64 / URL 编解码

文本与 Base64 互转、URL 百分号编解码,中文和 emoji 都不会乱码。全部在浏览器本地完成,不联网、不上传

输入

输入:0 个字符 · 0 字节(UTF-8)

解码方向会自动忽略换行与空格,也认 URL 安全字符集(-_)和缺失的 = 补位, 带 data:image/png;base64, 前缀的内容可以直接粘进来。在输入框里按 Ctrl + Enter 等同于「编码为 Base64」。

输出结果

编码后的长度会比原文长三分之一左右,这是 Base64 的固有代价:每 3 个字节要写成 4 个字符。 结果区显示的是 UTF-8 字节数,中文一个字占 3 字节,emoji 通常占 4 字节。

Base64 到底是什么

Base64 是一种把任意字节翻译成 64 个可打印字符的表示方法:用 A–Z、a–z、0–9 加上 +/,末尾用 = 补位。每 3 个字节切成 4 组、每组 6 位, 正好对应一个字符,所以编码之后长度大约多出三分之一。它的用途很直接:邮件正文、URL、 配置文件只保证"能放可打印字符",二进制直接塞进去会被截断、被转义,先"洗"成纯文本就安全了。

为什么中文会乱码:btoa 只认 Latin-1

编码用 btoa()、解码用 atob(),看着一行就能搞定。但 btoa 年代很早,只接受码位在 0–255 之间的字符(Latin-1);中文的码位远大于 255, 直接写 btoa('你好') 会当场抛 InvalidCharacterError

正确做法分两步:先用 TextEncoder 把字符串按 UTF-8 编成字节,再对这些字节做 Base64;解码方向相反,atob 还原出字节后再用 TextDecoder 解回字符串。 顺序错了就会出现"看着是乱码、其实没坏"的现象——把 UTF-8 字节当 Latin-1 解释,就会得到 ä½ å¥½ 这种东西。

对照一下:你好,世界 做 Base64 得到 5L2g5aW977yM5LiW55WM,正是本工具的结果。

Base64 不是加密

Base64 只是"换了个写法",不是"上了锁"。任何人拿到那串字符,一行代码就能还原成原文,不需要密码,也不需要密钥。

有人把口令写成 Base64 放进配置文件,以为别人看不懂——那只是一层遮挡,和用铅笔把字轻轻盖住差不多; 它也不能防篡改,改一个字符照样能解出别的内容。

URL 编码:+%20 的区别

URL 里不能直接出现空格、中文、&=,要写成 % 加两位十六进制, 这就是百分号编码,空格是 %20。但网页表单早期定了一套自己的规则 (application/x-www-form-urlencoded):提交时把空格换成 +,省两个字符。 同一个空格于是有了两种写法:

所以解出来的结果里还留着 +,多半不是工具坏了,是这条老规则在起作用。

什么场景会用到

怎么用


本工具完全在你的浏览器里运行,输入的内容不会发送到任何服务器,也不会被保存,关掉页面就没了。

← 返回工具箱