使用方法
- 將 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 個位元組,所以檔案大小約為文字長度的四分之三。如果比預期的檔案小很多,很可能是輸入內容被截斷了。
我的資料會被髮送到其他地方嗎?
不會。解碼、型別識別和預覽都在瀏覽器中執行,下載的檔案也是在你的裝置上生成的,不會上傳任何內容。