Base64 还原成文件
编码所有处理都在浏览器本地完成,数据不上传服务器
全程在浏览器里解码,没有任何上传。换行、空格、URL-safe 的 - 与 _、以及缺掉的补齐符号都会自动处理。
把一段 Base64 文本还原成文件 —— 粘进来,点下载。带不带 `data:` 前缀都认,并且会从前缀里读出类型(`data:image/png;base64,…` 会得到 `file.png` 而不是 `file.bin`)。 粘贴这件事比看上去麻烦,所以这里容忍的都是粘贴带来的东西,而不是语法错误:换行与空格全部忽略(PEM 与 MIME 编码的 Base64 就是每 76 个字符折一行,那是规范写法)、认 URL-safe 的 `-` 与 `_`(JWT 里就是这种)、缺掉的补齐符号 `=` 自动补上。真正不合法的三种情况会分别说明:含字母表外的字符、长度是 4n+1(那种长度编码不出来)、补齐符号位置不对。 ⚠️ 一个限制:下载的文件名要靠你填。Base64 里不含文件名,`data:` 前缀里也只有类型 —— 工具能推断的只有扩展名。
功能
- Base64 与 data URL 都能还原,自动取出前缀里声明的类型
- 按 MIME 推断扩展名(png、pdf、woff2……),认不出的给 .bin 而不是瞎猜
- 换行、空格、制表符一律忽略 —— PEM 那种折行写法可以直接粘
- 认 URL-safe 的 `-` 与 `_`,以及缺少的 `=` 补齐
- 三种非法情况分别给出原因,而不是一句「格式错误」
- 显示解码后的大小、识别出的类型、有没有 data: 前缀
- 全程在浏览器里解码,不上传
使用方法
- 把 Base64 文本(或整条 data URL)粘进输入框
- 类型与大小会立刻显示出来,可以下载时状态会变
- 按需要改一下文件名(自动填的是推断出来的扩展名)
- 点「下载文件」
常见问题
- 为什么还原出来的文件名是 file.bin?
- 因为你粘的 Base64 没有带 data: 前缀,里面没有任何类型信息 —— Base64 本身只编码字节,不编码「这是什么」。带上前缀(`data:image/png;base64,…`)工具就能推断出 `.png`。这也说明一件事:只给人一段裸 Base64,对方是没法知道该用什么程序打开它的,发文件时请连同类型一起说明。
- 为什么我粘进来的文本被说成非法?
- 三种原因,提示里会区分。含字母表外的字符:Base64 只用 `A–Z a–z 0–9 + / =`,出现别的字符通常是把别的文本混进来了(比如把 `<img src="data:…">` 整段标签连引号一起粘了进来 —— 那对引号就是非法字符)。长度是 4n+1:Base64 的字符数一定是 4 的倍数(去掉空白之后),余 1 说明少了一个字符或多了几个。补齐位置不对:`=` 只能出现在最后。
- URL-safe 的 Base64 是什么?
- 标准 Base64 用 `+` 和 `/`,这两个字符在 URL 里有特殊含义(`+` 会被解析成空格),所以有一个变体把它们换成 `-` 和 `_`,并且通常省略补齐的 `=`。JWT、以及很多「把二进制塞进 URL」的场景用的是这一种。工具两种都认,粘进来不用手动替换。
- 粘一段很长的 Base64 会很慢吗?
- 粘贴与解码本身很快(几 MB 是毫秒级),慢的是输入框渲染这么长的文本 —— 这也是「文件转 Base64」那边把上限设在 4 MB 的原因。如果只是想解码一个很大的文件,用命令行的 `base64 -d 输入.txt > 输出` 会舒服得多。
相关工具
文件转 Base64
编码拖入任意文件即可得到 Base64 与可直接粘进 src / url() 的 data URL,并列出 MIME、体积与编码后的长度。文件不上传。
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
图片转 Base64
网络图片转 Base64 与 Data URL:拖拽、选择或粘贴截图,可按最长边缩放、转成 PNG/JPEG/WebP 并调质量。图片只在浏览器本地处理,绝不上传。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
JWT 解析与验签
编码把 JWT 拆成 header、payload、signature,支持用密钥验证 HS256/384/512 签名,并把 exp、nbf 换算成可读时间。全部在浏览器本地完成。