使用方法
- 将 Base64 字符串或完整的 Data URI 粘贴到输入框中,其中的空格和换行不影响解码。
- 查看识别出的文件类型和大小。图片、PDF、音频、视频和文本可以直接预览。
- 下载文件,文件名和扩展名会与识别出的类型相匹配。
如何识别文件类型
Base64 文本只包含字节,不包含文件名。除非粘贴的是带 MIME 类型的 Data URI,否则字符串本身并不会说明它是 PDF、ZIP 压缩包还是一段音频。因此,工具会先解码,再检查开头的几个字节,也就是文件签名,俗称“魔数”。大多数格式都把它放在文件的最开头。由于这些字节是固定的,各种格式的 Base64 文本开头也很有辨识度:
| 格式 | 开头字节 | Base64 开头 |
|---|---|---|
%PDF | JVBER | |
| PNG | 89 50 4E 47 | iVBORw0KGgo |
| JPEG | FF D8 FF | /9j/ |
| GIF | GIF8 | R0lGOD |
| ZIP(以及 DOCX、XLSX、JAR) | PK 03 04 | UEsDB |
| 带 ID3 标签的 MP3 | ID3 | SUQz |
| WAV、WebP、AVI(RIFF) | RIFF | UklGR |
解码后的文件打不开怎么办
Base64 解码本身是无损的,所以文件损坏几乎都是因为输入内容和预期不符。可以按以下顺序排查:
- 输入被截断。日志文件、终端、表格单元格和聊天软件经常会截断很长的字符串。末尾缺失会让文件变短,大多数格式因此无法打开。如果知道原文件的大小,可以和解码后的大小对比一下。
- 混入了多余字符。连同值一起复制的引号、逗号、字段名,以及 JSON 字符串中的
\/、\n等转义序列,都不属于 Base64,只复制值本身即可。 - 其实是另一种编码或变体。十六进制、Base32、Base85 或自定义字母表的字符串乍看相似,但按 Base64 解码只会得到乱码。编码识别工具会尝试所有解码器,找出匹配的那一种。
- 内容根本不是文件。如果结果被识别为纯文本,说明这是一段文本的 Base64,可能是 JSON、令牌,或者又一层 Base64。可以用 Base64 解码查看内容,如果结果仍是 Base64,就再解码一次。
Base64 校验工具会列出无效字符及其位置,并报告填充问题,便于找到损坏的部分。
在代码中把 Base64 解码为文件
# Python
import base64
with open('output.bin', 'wb') as f:
f.write(base64.b64decode(data))
// Node.js
fs.writeFileSync('output.bin', Buffer.from(data, 'base64'));
# Linux
base64 -d input.txt > output.bin
# macOS
base64 -D -i input.txt -o output.bin
# Windows PowerShell
[IO.File]::WriteAllBytes("C:\files\output.bin", [Convert]::FromBase64String((Get-Content input.txt -Raw)))
常见问题
可以识别哪些文件类型?
支持带有明确文件签名的常见格式:PDF、ZIP、GZIP、7z、RAR 压缩包,PNG、JPEG、GIF、WebP 等图片,MP3、WAV、OGG、FLAC、M4A 音频,MP4、WebM 视频,WOFF、WOFF2、TTF、OTF 字体,以及 WebAssembly 等。JSON、XML、HTML 和纯文本也能识别。没有文件签名的格式无法识别,如果你知道真实类型,下载后自行修改扩展名即可。
为什么 Word 或 Excel 文件被识别成了 ZIP?
DOCX、XLSX、PPTX 和 EPUB、JAR 一样,本质上都是内部有特定目录结构的 ZIP 压缩包,开头的魔数和普通 ZIP 文件完全相同。解码出的字节没有问题,把下载的文件改名为 .docx、.xlsx 等所需的扩展名即可正常打开。
可以直接粘贴 Data URI 吗?
data:...;base64, 前缀的完整字符串,也可以只粘贴 Base64 部分。无论哪种方式,文件类型都会根据解码后的字节进行判断。为什么解码后的文件比 Base64 文本小?
Base64 用 4 个字符表示 3 个字节,所以文件大小约为文本长度的四分之三。如果比预期的文件小很多,很可能是输入内容被截断了。
我的数据会被发送到其他地方吗?
不会。解码、类型识别和预览都在浏览器中运行,下载的文件也是在你的设备上生成的,不会上传任何内容。