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 個位元組,所以檔案大小約為文字長度的四分之三。如果比預期的檔案小很多,很可能是輸入內容被截斷了。

我的資料會被髮送到其他地方嗎?

不會。解碼、型別識別和預覽都在瀏覽器中執行,下載的檔案也是在你的裝置上生成的,不會上傳任何內容。