Base64 编码/解码
Base64 编码,是把文本或文件按每 3 字节换 4 个字符的规则,变成只含 A–Z a–z 0–9 和 + / 的纯文本,好让图片、PDF 这类二进制内容能塞进 HTML、JSON 或邮件里传输,解码则是反向还原。粘贴文本或拖入文件即可本地编码,也能把 Base64/DataURL 还原成文本或文件下载。中文、emoji 按 UTF-8 逐字节往返一致,可加 data: 前缀直接用于 img 标签,也能切 URL-safe 字母表用于网址和 JWT。内容不上传,免费不注册。
🔒 编解码在你的浏览器内完成,文本和文件都不会上传服务器。
如何使用Base64 编码/解码
选模式:「编码」是文本/文件 → Base64,「解码」是 Base64 → 文本/文件。切换模式会清空当前输入。
编码时把文件拖进虚线框(图片、PDF、任意二进制都行,单个 100MB 以内),或直接把文本粘进输入框;需要贴进网页就勾「输出 DataURL 前缀」,要放进网址或 JWT 就勾「URL-safe 字母表」(两者互斥,勾了 DataURL 后 URL-safe 会变灰)。解码时把 Base64 粘进输入框,带不带 data:…;base64, 前缀都能识别。
点按钮出结果:编码结果可「复制」或「下载文本」为 base64.txt;解码结果若是文本会直接预览并可复制,若判定为二进制则点「下载为文件」还原。结果区只预览前 4000 个字符,复制和下载拿到的是完整内容。
关于Base64 编码/解码的常见问题
- Base64 编码解码会上传我的文件吗
- 不会。编码和解码都由浏览器里的 JavaScript 在你的设备上完成,文本和文件都不发往服务器,也不写入本地存储,关闭或刷新页面即清除。想自己确认:按 F12 打开开发者工具的「网络」面板,再点一次「编码为 Base64」,整个过程不会产生请求。所以内网截图、带身份信息的证件照、私有证书这类内容也可以直接拖进来处理。
- 怎么把图片转成 Base64 贴进 HTML 里
- 切到「编码」模式,把 png、jpg、gif、webp、svg 拖进虚线框,勾选「输出 DataURL 前缀」,点「编码为 Base64」,结果就是 data:image/png;base64,iVBORw0… 这样一整串,复制后直接放进 img 的 src 或 CSS 的 url() 即可,不用再传图床。要留意前缀里的类型:工具按扩展名识别常见格式,png、jpg、gif、webp、svg、pdf、txt、json 能自动写对;换成 .ico、.woff2 这类不在识别范围内的文件,前缀会退成 data:application/octet-stream;base64,,浏览器多半不显示,手动把它改成正确的 MIME(如 image/x-icon)就好。
- Base64 怎么转回图片或 PDF 文件
- 切到「解码」模式,把 Base64 粘进输入框,带 data:image/png;base64, 前缀或只有裸串都可以,点「解码」后再点「下载为文件」。扩展名按前缀里的 MIME 推断:带 data:application/pdf 的存成 decoded.pdf,带 data:image/jpeg 的存成 decoded.jpg;没有前缀时无从判断类型,会存成 decoded.bin,自己改成对应扩展名即可打开。解出来是图片、压缩包这类二进制时,页面会提示「疑似二进制,建议下载为文件」并隐藏文本预览,避免满屏乱码。
- Base64 编码中文和 emoji 会不会乱码
- 不会。文本先按 UTF-8 转成字节再编码,中文、emoji、生僻字都能原样往返:「你好」是 6 个字节,编出来是 8 个字符 5L2g5aW9,粘回去解码还是「你好」。这一点值得单说——浏览器自带的 btoa() 只吃 Latin-1,直接喂中文会抛 InvalidCharacterError,有些在线工具为了绕开它先把字符截断成单字节,中文就此变成乱码;本工具按字节自行编解码,不走 btoa。反过来,如果你手上的 Base64 原文是 GBK 编码的中文,解出来会是一串「�」,这时点「下载为文件」,再用支持 GBK 的编辑器打开即可。
- Base64 编码后体积会变大多少
- 大约变成原来的 4/3,也就是多出 33% 左右。公式是「字符数 = 向上取整(字节数 ÷ 3) × 4」:1 KB(1024 字节)编出 1368 个字符,100 KB 的 png 编出 136536 个字符(约 133 KB),1 MB 的 jpg 编出约 1.33 MB 文本。勾了 DataURL 还要再加前缀本身的长度,data:image/png;base64, 固定占 22 个字符。所以内联进网页要挑小图:几 KB 的图标划算,几百 KB 的照片内联会把 HTML 撑大、还没法被浏览器单独缓存。
- URL-safe Base64 和标准 Base64 有什么区别
- 标准字母表用 + / 两个字符并以 = 补齐长度,URL-safe 把它们换成 - _ 并去掉末尾的 =。差别只在这三处,编出来的字节内容完全一样:三个 0xFF 字节标准编法是 ////,URL-safe 是 ____。要换的原因是 + 在网址查询串里代表空格、/ 会被当成路径分隔符、= 在参数里有歧义,直接塞进 URL 容易被中途改写。所以网址参数、文件名、JWT 用 URL-safe,网页内联的 DataURL 必须用标准字母表(两个选项因此互斥)。解码这边不用你操心,本工具两种字母表都认,有没有 = 填充都能解。
- Base64 解码提示不是有效字符串怎么办
- 这个提示只有两种触发条件:串里混进了字母表以外的字符,或者去掉填充后长度除以 4 余 1。最常见的是把整个 JWT 连着两个点粘了进来——. 不在 Base64 字母表里,必然报错,要按点拆开、只粘其中一段。其次是从聊天记录或日志里复制时漏掉了尾巴,长度对不上。换行和空格不用管,工具会自动忽略,多行排版的 Base64 可以整段粘。另外提醒一句:Base64 里的 = 只能出现在末尾,夹在中间同样算非法字符。
- Base64 解码不报错但解出来是乱码
- 先排除编码不对(原文是 GBK 中文),剩下最常见的原因是这串 Base64 经过了网址:URL 里的 + 会被解析成空格,而工具会把空格当空白直接忽略,长度一少,后面的字节就整体错位,于是既不报错、解出来也全是乱的。判断方法很简单——看看串里是不是有本不该有的空格。修法是把这些空格换回 +,或者先用 URL 解码工具把整串还原一遍再来解码。若原本就是 URL-safe 形式(带 - _),直接粘进来即可,不用手工换回 + /。
- Base64 在线编码能处理多大的文件
- 单个文件上限 100MB,超过会提示跳过。但真正的瓶颈是内存和渲染:编码结果比原文件大三分之一,还要在页面里显示,几十 MB 的文件在手机上很容易卡住甚至崩掉标签页,实际建议控制在 10MB 以内。结果区只渲染前 4000 个字符(后面用省略号表示),复制和下载拿到的都是完整内容,不必担心被截断。需要处理更大的文件,用本机命令行更稳妥,例如 macOS/Linux 的 base64 -i 文件名。
- JWT 里的 Base64 能用这个工具解码吗
- 能,但要分段粘。JWT 是 header.payload.signature 三段用点连起来的,每段各自是 URL-safe Base64(无 = 填充),把中间的 payload 段单独粘进来点「解码」,就能看到 {"sub":"…","exp":…} 这样的 JSON,第一段则是 {"alg":"HS256","typ":"JWT"}。第三段是签名的原始字节,解出来必然是乱码,属正常。想一次看完整个 token、顺便看过期时间,用 JWT 解析工具更省事;本工具胜在能顺手解任意一段 URL-safe Base64。
- 手机上怎么把图片转成 Base64
- 用手机浏览器(iOS Safari、安卓 Chrome、微信内置浏览器都行)打开本页,点虚线框会唤起相册或文件选择器,选好图片再点「编码为 Base64」,处理同样在手机本地完成,不用装 App。结果长按可全选复制,或点「下载文本」存成 base64.txt 再转发。微信里收到的图片要先保存到相册或「用其他应用打开」存进文件,才能被选中。手机内存小,选图前先看一眼大小,几 MB 以内比较稳。
图片转 Base64 内联到网页,什么时候值得
一句话:只有几 KB 的小图标值得内联,超过 10 KB 就该老老实实用图片文件。内联省掉的是一次 HTTP 请求,代价是文本比原图大三分之一、跟着 HTML/CSS 一起下载,而且改一个字节整份文件的缓存就失效。下面这几档按 ceil(字节数 ÷ 3) × 4 实算,可以自己拖个文件对一对。
| 原文件 | Base64 字符数 | 换算体积 | 适不适合内联 |
|---|---|---|---|
| 1 KB 的 SVG 图标(1024 字节) | 1368 | 约 1.3 KB | 适合,省一次请求 |
| 5 KB 的 png 小图标 | 6828 | 约 6.7 KB | 适合,常见于按钮图标 |
| 100 KB 的 png 插图 | 136536 | 约 133 KB | 不建议,HTML 明显变大 |
| 1 MB 的 jpg 照片 | 1398104 | 约 1.33 MB | 不建议,改用图片 URL |
| 3 字节(如 0xFF 0xFF 0xFF) | 4 | 4 个字符 | 最小单元:3 字节换 4 字符 |
Base64 解码失败或解出乱码,怎么排查
解码出问题分两类:一类直接报「不是有效的 Base64 字符串」,一类不报错但内容是乱的——后者更难缠,因为工具会自动忽略空白字符,错位发生得悄无声息。对着下表按现象找原因,基本都能定位。
| 现象 | 原因 | 怎么改 |
|---|---|---|
| 提示「不是有效的 Base64 字符串」 | 串里有字母表以外的字符,如 JWT 的点、中文引号、省略号 | 只保留 A–Z a–z 0–9 与 + / 或 - _ 和末尾的 = |
| 字符看着都合法,仍然报错 | 去掉填充后长度除以 4 余 1,多半是复制时漏了一位 | 回原处重新完整复制;换行和空格不影响,可整段粘 |
| 不报错,但解出来短一截且乱 | Base64 经过网址,+ 被解析成了空格,空白被忽略后字节错位 | 把空格换回 +,或先用 URL 解码还原整串再解 |
| 中文全变成「�」 | 原文按 GBK/GB2312 编码,这里按 UTF-8 解读 | 点「下载为文件」,用支持 GBK 的编辑器打开 |
| 提示疑似二进制,看不到文本 | 内容本来就是图片、压缩包等二进制 | 点「下载为文件」;没有 DataURL 前缀时存成 decoded.bin,自行改扩展名 |
相关工具:网址参数里的 %E4%BD%A0 这类百分号编码,用 URL 编码/解码处理;想一次看完整个 token 和过期时间,用 JWT 解析;核对下载的文件有没有损坏,用 文件 MD5/SHA 校验。 还有一个常见混淆:Base64 不是「64 进制」,它换的是字节的写法、不保留数值大小关系; 要把一个数在二进制、八进制、十六进制之间换算,用 进制转换。