JVBERi0 开头的 Base64 是什么文件?
JVBERi0 = PDF 是 PDF。所有 PDF 都以 `%PDF-` 这几个字节开头,编码成 Base64 就是 `JVBERi0`。同理,`iVBORw0KGgo` 开头是 PNG,`/9j/` 是 JPEG,`UEsDB` 是 ZIP(DOCX、XLSX 也是 ZIP 格式)。
Base64转PDF在线解码:纯 Base64、带 data:application/pdf 前缀的字符串、含 \/ 转义的 JSON 值甚至整段接口响应都能直接粘贴,按文件头识别真实类型,内嵌预览、一键下载;PDF 被截断、其实是图片或 16 进制时明确提示。也支持 PDF/文件转 Base64,本地处理不上传。
读取方式:
把 PDF 或任意文件拖到这里,或点击选择
任意类型 · 最大 50 MB · 不会上传
每种文件都以固定的「魔数」字节开头,所以它的 Base64 也以固定的字符开头。下表的前缀由本工具同一个引擎根据真实文件头现场算出。
| Base64 开头 | 文件类型 | 魔数(16 进制) |
|---|---|---|
JVBERi0 | 25 50 44 46 2D | |
iVBORw0KGgoAAAANSUhEU | PNG | 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 |
/9j/ | JPEG | FF D8 FF |
R0lGOD | GIF | 47 49 46 38 |
UEsDB | ZIP / DOCX / XLSX / PPTX | 50 4B 03 04 |
0M8R4KGxGu | Office 97–2003 (DOC/XLS/PPT) | D0 CF 11 E0 A1 B1 1A E1 |
H4sI | Gzip | 1F 8B 08 |
UklGR | RIFF (WebP / WAV / AVI) | 52 49 46 46 |
SUQz | MP3 (ID3) | 49 44 33 |
e1xydG | RTF | 7B 5C 72 74 66 |
由开发 Go Tools 编码类工具的工程师撰写并审核。本页引用的每个长度、前缀和示例都由页面自身的引擎算出,并由自动化测试逐项核对。
JVBERi0 = PDF 是 PDF。所有 PDF 都以 `%PDF-` 这几个字节开头,编码成 Base64 就是 `JVBERi0`。同理,`iVBORw0KGgo` 开头是 PNG,`/9j/` 是 JPEG,`UEsDB` 是 ZIP(DOCX、XLSX 也是 ZIP 格式)。
+33.3% 每 3 个字节变成 4 个字符,大约多出 33.3%:1 MB(1,048,576 字节)的 PDF 编码后是 1,398,104 个字符。如果像邮件附件那样每 76 个字符换一次行,是 1,434,896 个字符,多出约 36.8%。
Base64 用 64 个安全的文本字符(A–Z、a–z、0–9、+、/)加上填充符 = 来表示任意字节,每 3 个字节写成 4 个字符。这样,PDF 这类二进制文件就能放进只能传文本的地方:JSON 字段、XML 节点、邮件正文、数据库的文本列。Base64转PDF 就是把这一步倒过来:把字符还原成字节,按 .pdf 保存。麻烦在于,实际拿到的 Base64 很少是干净的——带 data: 前缀、带 JSON 转义、带换行,或者用的是另一套字母表,不少转换工具会默默生成一个打不开的文件。
%PDF-1.4 → bytes 25 50 44 46 2D 31 2E 34 JVBERi0xLjQ= → the same bytes in Base64 data:application/pdf;base64,JVBERi0xLjQ= → data URI form
data URI 前缀、\/ 与 \n 转义、引号、MIME 换行、URL 安全的 - _、URL 里复制来的 %2B %2F、PEM 头尾、缺失的 = 填充都能自动处理,而且每一步都写在输入框下方。
把 {"code":0,"data":{"file":"JVBERi0…"}} 原样粘进来,自动取最像 Base64 的字段并显示它的路径(如 data.file),不用再手动把字符串抠出来。
PDF、PNG、JPEG、GIF、WebP、DOCX、XLSX、PPTX、ZIP、GZIP、MP3、MP4 等 50 多种格式按开头的魔数识别。前缀写错了也没关系,下载时用的是真实扩展名。
PDF 缺 %%EOF(复制不全或被字段长度截断)、Base64 被编码了两次、把 16 进制当成 Base64、数据是 gzip 压缩过的、PDF 已加密——这些情况都会单独提示。
PDF 用浏览器自带阅读器打开,图片和 SVG 直接显示,文本和 JSON 以文本显示。HTML 只显示源码、不渲染,因为渲染出来的脚本会在本站页面里运行。
拖入最大 50 MB 的文件,输出纯 Base64 或 data URI,可选 URL 安全或每 76 字符换行,同时给出准确的体积膨胀比例。
base64.b64decode open('out.pdf', 'wb').write(base64.b64decode(s))。有 - 和 _ 时用 urlsafe_b64decode;b64decode 默认会丢弃换行等非法字符,传 validate=True 才会报错。
java.util.Base64 Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s))。getDecoder() 不接受换行;getUrlDecoder() 用于 - 和 _。
Buffer fs.writeFileSync('out.pdf', Buffer.from(s, 'base64'))。Buffer 两套字母表都接受、会忽略空白,但遇到其他非法字符也只是静默跳过、不报错,所以最好检查结果是否以 %PDF- 开头。
atob / Uint8Array.fromBase64 先转成 Uint8Array 再创建 Blob。Uint8Array.fromBase64() 是较新的内置方法,使用前确认目标浏览器是否支持。
base64_decode file_put_contents('out.pdf', base64_decode($s, true))。第二个参数传 true 开启严格模式,否则非法字符会被静默丢弃。
Convert.FromBase64String File.WriteAllBytes("out.pdf", Convert.FromBase64String(s))。允许空白字符,不接受 - 和 _。
base64 -d / certutil macOS 和 Linux:base64 -d < in.txt > out.pdf。Windows:certutil -decode in.txt out.pdf。
JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · 版本 1.4 · 保存为 file.pdf
以 JVBERi0 开头,也就是 %PDF-。无需清理,直接解码。
"data:application\/pdf;base64,JVBERi0xLjQK…"
读取方式:去掉了两侧引号 → 还原了 JSON 转义 → 去掉了 data URI 前缀(application/pdf)
PHP 的 json_encode 以及部分 Java 序列化库会把 / 写成 \/。粘进不处理转义的解码器,反斜杠就是非法字符。
{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}} 读取方式:从 JSON 中取出字段 data.file
不用手动截取字符串,工具会取最像 Base64 的字段,并写明取的是哪个字段。
data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
提示:data URI 声明为 application/pdf,但内容是 PNG,已按 file.png 保存
很多工具会照前缀写出一个任何阅读器都打不开的 .pdf。这里以文件头为准,不以声明为准。
255044462d312e370a…
提示:这看起来是 16 进制——按 16 进制读是一个 PDF。[按 16 进制解码]
16 进制的字符全都是合法的 Base64 字符,所以按 Base64 解码不会报错,只会默默得到一堆乱码。25 50 44 46 正是 %PDF。
纯 Base64、data:application/pdf;base64,…、从 JSON 里复制出来带 \/ 转义的字符串,或者整段接口响应都行。字符串特别长时,用「打开 .txt 文件」比粘贴更快。
输入框下方会列出每一步清理:去掉了前缀、还原了转义、补了填充、从 JSON 的哪个字段取的值。输入有问题时,报错会指出具体是哪个字符、在第几位。
徽标显示的是按文件头(魔数)识别出的真实类型。不是 PDF、data URI 声明的类型与内容不符、PDF 末尾缺 %%EOF(被截断)时,都会出现黄色提示并说明原因。
PDF 用浏览器自带的阅读器内嵌显示,图片和文本直接显示。需要的话改一下文件名,点「下载」即可。要把文件转成 Base64,切到「PDF / 文件 → Base64」页签拖入文件。
data:application/pdf;base64, 不是 Base64 的一部分。不去掉它,严格的解码器会报错(: 和 ; 是非法字符),宽松的解码器则会把开头几个字节解错,文件不再以 %PDF- 开头。
base64.b64decode(value) # value = 'data:application/pdf;base64,JVBERi0…'
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64) PDF 是二进制文件。把解码结果转成字符串再按文本编码写盘,非法字节会被替换、换行符会被改写,交叉引用表随之损坏,文件就打不开了。
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString()) fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64')) Java 的 Base64.getDecoder() 遇到换行会报错,而邮件里、Linux base64 命令输出的 Base64 每 76 个字符换一次行。改用 MIME 解码器,或先去掉空白。
byte[] pdf = Base64.getDecoder().decode(wrapped); // IllegalArgumentException
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);
JWT 和很多 URL 参数用 -、_ 代替 +、/,并省略 = 填充。标准解码器要么拒绝,要么解出错误的字节。
base64.b64decode(token_part) # contains - and _
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))
浏览器里的 atob 返回的是「二进制字符串」,一个字符对应一个字节。直接传给 new Blob([str]) 会按 UTF-8 编码,大于 127 的每个字节都变成两个字节。要先转成 Uint8Array。
new Blob([atob(b64)], { type: 'application/pdf' }) const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' }) PDF 以 %%EOF 结尾。Base64 被数据库字段长度、日志单行长度或复制不全截断后,照样能解码,但阅读器会报错或缺页。拿它的长度和发送方给出的长度对一下。
SELECT LENGTH(pdf_b64) FROM docs; -- 65535: suspiciously round
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT; -- or store the bytes in a BLOB
{"filename": …, "content": "<base64>"} 这种格式。在这里把文件转成 Base64,拼成 Postman 或 cURL 的测试请求。%%EOF,说明字段或日志行太短,把内容截断了。+ /(第 4 节),URL 与文件名安全版是 - _(第 5 节)。URL 安全的 Base64 通常省略 = 填充。同一个字符串里两套混用,说明它被改过或者是拼接出来的。= 填充让长度凑成 4 的倍数。没有填充时,长度除以 4 余 2 或余 3 都能补回来;余 1 则任何合法的 Base64 都不可能出现——说明复制时丢了或多了一个字符。= 出现在中间,通常是两段 Base64 被拼在了一起。%PDF-,PNG 是 89 50 4E 47,DOCX、XLSX 这类基于 ZIP 的格式是 50 4B 03 04。这些字节决定了 Base64 的前几个字符,所以不解码也能看出类型——见工具里的对照表。%%EOF 结尾。如果最后 1,024 个字节里找不到它,文件几乎可以肯定被截短了。PDF 头允许出现在前 1,024 个字节内的任意位置,大多数阅读器仍能打开这种文件,所以这里只提示、不拒绝。{"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}),或者直接用 data URI,接收方就不必去猜。%PDF- 开头。一行代码就能拦住取错字段、重复编码、把错误页面当文件编码这几类问题。multipart/form-data 或预签名下载链接对两端都更轻。BLOB/bytea 列比 Base64 文本小三分之一,也不会像 VARCHAR 那样被静默截断。只在接口边界上做 Base64 编码。data:application/pdf;base64, 前缀、引号、换行和 JSON 转义都不用手动删,会自动处理。 data: 前缀一起解码了;解码后的字节按文本而不是二进制写入;字符串被截断(末尾没有 %%EOF);Base64 被编码了两次;或者它根本不是 PDF,比如是 PNG 图片或一段 JSON 报错信息。把同一段字符串粘到这里,每种情况都会给出对应提示。 JVBERi0 是 PDF,iVBORw0KGgo 是 PNG,/9j/ 是 JPEG,R0lGOD 是 GIF,UEsDB 是 ZIP(DOCX、XLSX、PPTX 都是 ZIP),H4sI 是 gzip。本工具会读取解码后的魔数显示类型,并按对应扩展名保存。 data:application/pdf;base64,JVBERi0…,浏览器可以把它直接当链接或 src 打开。接口一般只要逗号后面的 Base64 部分。 %PDF- 开头,显示的类型就是这些字节的真实格式。常见的意外有:扫描件其实是 PNG 或 JPEG、是 DOCX、是装了几个 PDF 的 ZIP,或者对方把一段 JSON / HTML 报错信息编码成了 Base64 发过来。 %%EOF 标记结尾。缺了它,说明 Base64 几乎肯定被截断了:只复制了一部分、被数据库字段(例如 MySQL 的 TEXT,最多 65,535 字节)截短,或者被日志单行长度限制切断。请重新拿到完整的字符串,解码无法补回丢失的数据。 编码和格式化
完整 ASCII 码表:128 个字符的十进制、十六进制、八进制、二进制对照,支持字符转 ASCII 码、ASCII 码转字符双向转换。控制字符附各语言转义写法与终端 ^M 记法,并说明你会在哪儿真的遇到它。浏览器本地运行,不上传。
编码和格式化
在线免费生成 EAN-13、UPC-A、Code 128、Code 39 等 15 种条形码,导出无损 SVG 或高清 PNG。输入 12 位自动补校验位;末位写错会直接告诉你应该是几,并一键改好。支持批量生成打包下载。
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
编码和格式化
粘贴乱码即可自动还原原文。工具枚举 UTF-8、GBK、Big5、Shift_JIS、EUC-KR 等编码组合并按可信度排序,标出哪一条经过往返校验、能逐字复现。同时提供各编码下的字节对照与 hex 反解。免费在线,全程在浏览器内完成,内容不上传。