Base64 與常見編碼格式科普:一次分清不搞混

Base64 家族成員不少,長得像的更多。這篇把幾種常見編碼格式一次講清楚,讓你看到字串就能大概判斷它是什麼。

2026-09-30 · 5 分鐘閱讀

Base64 與 Base64URL

標準 Base64 用 + 和 / 兩個符號,但在網址裡它們有特殊意義,所以有了 Base64URL 變體:把 + 換成 -、/ 換成 _,結尾的 = 直接省略。JWT token 用的就是這個變體。

兩者可以互相轉換,但不能混用解碼器。用標準解碼器去解 Base64URL 字串,遇到 - 和 _ 就會報錯,選錯變體是常見的失敗原因。

十六進位與 URL 編碼

十六進位(Hex)把每個位元組寫成兩個 0–9a–f 字元,例如中文「中」會變成一串 hex。它的特色是固定膨脹一倍、可讀性高,常用在雜湊值、顏色碼、除錯輸出。

URL 編碼(百分號編碼)則是把特殊字元寫成 %XX,例如空格變 %20。它只處理「有問題的字元」、不動普通字母,所以網址裡的中文字常看到這種形式。跟 Base64 的用途完全不同。

UTF-8:編碼之前的編碼

在做 Base64 之前,文字要先變成位元組,這一步用的就是字元集,最常見的是 UTF-8。同一個中文字,用 UTF-8 和用 Big5 轉出的位元組不同,Base64 結果也會完全不同。

所以「Base64 解出來是亂碼」時,兇手往往是字元集而不是 Base64。先對齊字元集,再談編碼,順序別搞反。

常見問題

看到一串很長的英數字,怎麼判斷是哪種編碼?

看字元組成:只有 0–9a–f 是十六進位;有 +/= 結尾可能是標準 Base64;有 -_ 沒 = 可能是 Base64URL;有 %XX 的是 URL 編碼。再看長度與上下文輔助判斷。

Base64URL 和標準 Base64 能混用嗎?

不行直接混用,但轉換很簡單:把 -_ 換回 +/,再把長度補到 4 的倍數加上 =,就是標準 Base64。很多函式庫兩種都支援,選對參數即可。

為什麼雜湊值常用十六進位而不用 Base64?

十六進位固定膨脹一倍、字元最單純(只有 0–9a–f),在各種系統裡都不會被轉義,可讀性和相容性最好。Base64 雖然短,但 +/= 在某些場合是麻煩。

相關教學