使用方法
- 把 Base64 字串貼上到輸入框,或點選「開啟檔案」載入包含 Base64 文字的檔案。
- 保持文字輸出並選擇字元集(預設 UTF-8);如果是二進位資料,把輸出切換為十六進位。
- 解碼失敗時檢視錯誤提示,其中會給出第一個無效字元的位置。
- 複製解碼結果,或將其下載儲存。
解碼器能接受哪些輸入
解碼是編碼的逆過程:每個字元還原成 6 位數值,每 4 個字元組合成 3 個位元組。實際遇到的 Base64 往往不夠規範,因此本解碼器的容錯性較強:
- 空格和換行會被忽略,按行折斷的 MIME 郵件正文和 PEM 內容可以直接貼上。不過請先刪掉
-----BEGIN和-----END這兩行:其中的字母和短橫線都是合法的 Base64 字元,會被當作資料解碼。 - URL 安全格式中的
-和_與標準 Base64 中的+和/同樣可以解碼。 - 缺少填充也沒有問題。只有長度為 4n + 1 的字串會被拒絕,因為單獨剩下的一個字元無法組成一個位元組,這通常說明字串被截斷了。
- Data URI 同樣可以直接貼上,開頭的
data:...;base64,字首會在解碼前自動去掉。
文字輸出還是二進位輸出
解碼的結果始終是一串位元組。如果原始內容是文字,保持文字輸出並選擇對應的字元集即可;如果原始內容是圖片、PDF、壓縮包、金鑰或密文,換什麼字元集都無法變成可讀文字,此時可以把輸出切換為十六進位檢視位元組,或者使用 Base64 轉檔案 和 Base64 轉圖片 預覽並儲存。從開頭幾個字元往往就能看出內容型別:
| Base64 開頭 | 解碼後的內容 |
|---|---|
iVBORw0KGgo | PNG 圖片 |
/9j/ | JPEG 圖片 |
R0lGOD | GIF 圖片 |
JVBERi0 | PDF 文件 |
UEsDB | ZIP 壓縮包,包括 DOCX、XLSX 和 JAR |
H4sI | gzip 壓縮資料 |
eyJ | JSON 物件,例如 JWT 的頭部 |
解碼結果為什麼是亂碼
- 字元集不對。UTF-8 文字按 Windows-1252 讀取時,é 會變成
é;GBK 或 Shift_JIS 文字按 UTF-8 讀取時,會出現替換字元(�)。請選擇文字原本使用的字元集,中文舊系統的資料通常是 GBK。 - 內容是二進位資料。滿屏雜亂符號,只在開頭附近夾著
PNG、PK之類的可讀片段,說明內容是檔案而不是文字。 - 壓縮或加密的資料。gzip 資料流、Protocol Buffers 和密文都能正確解碼,但本身就不是文字,用十六進位輸出才能看清實際內容。
- 被編碼了兩次。如果結果本身還是 Base64,把它貼上回輸入框再解碼一次即可。
在程式碼中解碼 Base64
# Python
base64.b64decode(s).decode('utf-8')
// Node.js(同樣接受 URL 安全格式)
Buffer.from(s, 'base64').toString('utf8')
// 瀏覽器:atob() 每個位元組返回一個字元,需要再按 UTF-8 解碼
new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)))
# Linux 和 macOS 命令列
echo 'SGVsbG8=' | base64 --decode
編碼規格
| 字母表 | A-Z a-z 0-9 + / |
|---|---|
| 輸出體積 | 每 3 位元組輸出 4 個字元(約 133%) |
| 填充 | 用 = 補足到 4 的倍數 |
| 標準 | RFC 4648 第 4 節 |
| 區分大小寫 | 是 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ== |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
常見問題
為什麼提示存在無效字元?
輸入中含有 Base64 字母表以外的字元,例如引號、反斜槓,或者從 URL 中複製來的
%2B、%3D 等百分號轉義。請去掉引號,或先對字串進行 URL 解碼。錯誤提示會給出第一個問題字元的位置。沒有填充的 Base64 能解碼嗎?
可以。解碼器不依賴末尾的
=,來自 JWT、URL 和各類 API 的無填充字串都能正常解碼。從 URL 中複製的 Base64 為什麼解碼結果不對?
如何把 Base64 解碼成圖片或檔案?
圖片可以使用 Base64 轉圖片 預覽和下載,PDF、壓縮包、音訊等檔案可以使用 Base64 轉檔案。兩者都會根據開頭的位元組自動識別檔案型別。
我的 Base64 資料會上傳到伺服器嗎?
不會。解碼完全由瀏覽器中的 JavaScript 完成,輸入內容不會離開你的裝置。解碼權杖、配置金鑰或個人資料時,這一點尤其重要。