Base64 转文件

粘贴 Base64 字符串或 Data URI,即可还原出原始文件。工具会根据开头的字节识别格式,能预览时直接显示,并以匹配的扩展名保存。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 将 Base64 字符串或完整的 Data URI 粘贴到输入框中,其中的空格和换行不影响解码。
  2. 查看识别出的文件类型和大小。图片、PDF、音频、视频和文本可以直接预览。
  3. 下载文件,文件名和扩展名会与识别出的类型相匹配。

如何识别文件类型

Base64 文本只包含字节,不包含文件名。除非粘贴的是带 MIME 类型的 Data URI,否则字符串本身并不会说明它是 PDF、ZIP 压缩包还是一段音频。因此,工具会先解码,再检查开头的几个字节,也就是文件签名,俗称“魔数”。大多数格式都把它放在文件的最开头。由于这些字节是固定的,各种格式的 Base64 文本开头也很有辨识度:

格式开头字节Base64 开头
PDF%PDFJVBER
PNG89 50 4E 47iVBORw0KGgo
JPEGFF D8 FF/9j/
GIFGIF8R0lGOD
ZIP(以及 DOCX、XLSX、JAR)PK 03 04UEsDB
带 ID3 标签的 MP3ID3SUQz
WAV、WebP、AVI(RIFF)RIFFUklGR

解码后的文件打不开怎么办

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 个字节,所以文件大小约为文本长度的四分之三。如果比预期的文件小很多,很可能是输入内容被截断了。

我的数据会被发送到其他地方吗?

不会。解码、类型识别和预览都在浏览器中运行,下载的文件也是在你的设备上生成的,不会上传任何内容。