字元不是位元組 · 位元組也不是 Base64 符號
先從原始位元組開始。
Base64 不認得「中文」或 emoji;它只把位元組每 6 bit 映射成可列印的 ASCII 符號。文字會先依 UTF-8、UTF-16 或 Latin-1 轉成位元組,解碼後也要用雙方約定的字元編碼,才能正確還原。
字元
A · 臺 · 🔧人閱讀的內容
UTF-8 位元組
41 · E8 87 BA · F0 9F 94 A7真正送進 Base64 的資料
6-bit 群組
010000 011110 011110 …每 24 個輸入 bit 分成 4 組
Base64 符號
QQ== · 6Ie6 · 8J+Upw==適合文字通道傳輸的 ASCII
兩套 RFC alphabet
只換兩個符號,協定仍然不同。
Shared 62 symbols · A–Z · a–z · 0–9+-+ 在 URL 或表單中可能有特殊意義
/_/ 是路徑分隔符號
=常依協定省略是否可省略由外層協定決定
Base64base64url確認變體後再轉換,不要直接混用
Padding 工作台
最後不足 3 個位元組時,才會出現等號。
4 個符號不需 padding3 個符號 + =1 個 =2 個符號 + ==2 個 =目前編碼結果保留標準 padding;解碼預設可補回缺少的末尾 =,也可要求完整 padding。無論哪種模式,長度除以 4 餘 1 與非零 pad bits 都不是 canonical Base64。
解碼結果分流
Base64 解碼成功,只代表拿到了位元組。
UTF-8 文字
48 65 6C 6C 6F以 fatal UTF-8 decoder 還原字元
二進位資料
00 FF A3 10 …顯示十六進位預覽,不捏造替代字元
已知檔案簽章
89 50 4E 47 …可能是 PNG,仍要按真正格式驗證
Data URL
data:image/png;base64,…前綴提供媒體情境,不是 encoded payload
嚴格解碼清單
拒絕有歧義的輸入,並說出具體原因。
輸入含 #不屬於所選的 Base64 alphabet
QUI===padding 過多或位置錯誤
QU JD嚴格模式拒絕內容中的空白
a+b/cBase64URL 模式混入 Standard alphabet
A長度除以 4 餘 1,不可能有效
pad bits 非零可以還原位元組,但不是 canonical encoding
BASE64 不是加密
改變資料表示,不會帶來機密性或完整性。
任何拿到字串的人都能還原位元組。
內容可以被修改後重新編碼。
不含外層包裝,長輸入通常增加約三分之一大小。