Base64 编码/解码

Base64 编码,是把文本或文件按每 3 字节换 4 个字符的规则,变成只含 A–Z a–z 0–9 和 + / 的纯文本,好让图片、PDF 这类二进制内容能塞进 HTML、JSON 或邮件里传输,解码则是反向还原。粘贴文本或拖入文件即可本地编码,也能把 Base64/DataURL 还原成文本或文件下载。中文、emoji 按 UTF-8 逐字节往返一致,可加 data: 前缀直接用于 img 标签,也能切 URL-safe 字母表用于网址和 JWT。内容不上传,免费不注册。

拖入任意文件(图片/二进制),点击选择
文件不上传 · 浏览器本地编码 · 也可直接粘贴文本

🔒 编解码在你的浏览器内完成,文本和文件都不会上传服务器。

如何使用Base64 编码/解码

1

选模式:「编码」是文本/文件 → Base64,「解码」是 Base64 → 文本/文件。切换模式会清空当前输入。

2

编码时把文件拖进虚线框(图片、PDF、任意二进制都行,单个 100MB 以内),或直接把文本粘进输入框;需要贴进网页就勾「输出 DataURL 前缀」,要放进网址或 JWT 就勾「URL-safe 字母表」(两者互斥,勾了 DataURL 后 URL-safe 会变灰)。解码时把 Base64 粘进输入框,带不带 data:…;base64, 前缀都能识别。

3

点按钮出结果:编码结果可「复制」或「下载文本」为 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 后的字符数(不含 DataURL 前缀的 22 个字符)
原文件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)44 个字符最小单元:3 字节换 4 字符

Base64 解码失败或解出乱码,怎么排查

解码出问题分两类:一类直接报「不是有效的 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 进制」,它换的是字节的写法、不保留数值大小关系; 要把一个数在二进制、八进制、十六进制之间换算,用 进制转换