Base64 編碼與解碼
把文字轉成 Base64 再轉回來,正確處理中文與 emoji 的 UTF-8 編碼,也支援網址安全格式。全部在你的瀏覽器中執行。
在你的瀏覽器中執行
Base64 是做什麼的
Base64 用 64 個字元重新表示任意位元組,讓資料能通過只接受文字的系統:電子郵件內文、JSON 字串、 網址、HTML 屬性。它是編碼,不是加密——任何人都能解回原樣。千萬不要用它來隱藏任何東西。
代價是體積。每 3 個位元組會變成 4 個字元,編碼後大約會膨脹 33%。
UTF-8 是多數工具出錯的地方
瀏覽器內建的 btoa 只處理 Latin-1 字碼單位,遇到 你好 會直接丟出例外,超過 U+00FF 的字元也會
被破壞。正確的做法是先把文字轉成 UTF-8 位元組:
// 錯誤:遇到非 Latin-1 字元會丟出例外
btoa('你好')
// 正確
btoa(String.fromCharCode(...new TextEncoder().encode('你好')))
上面的工具兩個方向都這樣處理,因此中文、日文與 emoji 都能完整還原。如果解碼後出現亂碼,代表輸入 原本就不是 UTF-8 文字——常見的情況是那其實是二進位檔案,而不是文字。
標準格式與網址安全格式
兩種字母表編碼的是同樣的位元組,只有三個字元不同。
| 第 62 個字元 | 第 63 個字元 | 補位 | |
|---|---|---|---|
| 標準(RFC 4648 §4) | + | / | = |
| 網址安全(RFC 4648 §5) | - | _ | 通常省略 |
在網址查詢字串中 + 會被解析成空格,/ 則會切斷路徑,所以 JWT 與帶簽章的網址都採用去掉補位的
網址安全格式。上面的解碼器兩種都接受,有沒有補 = 都可以。
Data URI
Data URI 就是在 Base64 前面加上媒體型別,讓小圖或字型直接嵌在 CSS 或 HTML 裡,不必再發一次請求:
data:image/png;base64,iVBORw0KGgo…
只有真正很小的檔案才划算——那 33% 的膨脹每次載入頁面都要付一次,而且這些位元組無法單獨快取。
你的資料只留在這裡
編碼與解碼都在你的瀏覽器完成,貼上的內容不會上傳。這一點值得留意:被貼進線上解碼器的 Base64 內容,往往就是權杖與工作階段 Cookie。