UTF-8 轉 Base64URL 轉換指南(2026)

A clean, modern visual representing the conversion from text data to secure web URL strings.

將 UTF-8 轉換為 Base64URL 只需 4 步:(1)將文字編碼為 UTF-8 位元組,(2)套用標準 Base64 編碼,(3)將 + 替換為 -,將 / 替換為 _,(4)去除結尾的 = 填充。這樣就能產生符合 RFC 4648 標準的URL 安全字串,廣泛用於 JWT 和 API 請求頭。

標準 Base64 與 Base64URL 的差異

字元 標準 Base64 Base64URL 原因
第 62 個字元 + - + 在 URL 中表示空格
第 63 個字元 / _ / 在 URL 中是路徑分隔符
填充 = 必填 省略 = 在 URL 中會變成 %3D
URL 安全 可直接用於查詢字串和檔案名稱

根據 RFC 4648 §5,這種「URL 與檔案名稱安全字母表」確保了跨系統的相容性。

標準 Base64 與 Base64URL 不安全字元的簡單對比圖。

4 步轉換流程

步驟 操作 範例(“Hello”)
1 UTF-8 文字 → 位元組 H e l l o → 位元組陣列
2 位元組 → 標準 Base64 SGVsbG8=
3 + 替換為 -/ 替換為 _ 此處無需變更
4 去除結尾的 = 填充 SGVsbG8

根據 維基百科,Base64 編碼會使資料大小增加約 33%

4 步轉換流程:文字 → 位元組 → Base64 → Base64URL。

Unicode 與 Emoji 處理

根據 NextUtils 的說明,Base64 是編碼而非加密——它只是將資料透過純文字通道傳輸。為了避免出現亂碼(「Mojibake」),務必先使用 TextEncoder 將文字轉換為 UTF-8 位元組。

輸入 不使用 TextEncoder 使用 TextEncoder
Hello 世界! 🌍 亂碼 / TypeError 正確的 Base64URL

程式碼範例

JavaScript(瀏覽器)— Unicode 安全

function toBase64Url(str) {
    const bytes = new TextEncoder().encode(str);
    const base64 = btoa(String.fromCharCode(...bytes));
    return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

Python 3 — 標準函式庫

根據 AskPython 的說明:

import base64

data = "Hello 世界! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)

Node.js — Buffer 轉換

const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
    .toString('base64')
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=/g, '');

故障排除:填充錯誤

錯誤 原因 解決方法
binascii.Error: Incorrect padding 缺少 = 填充 加入 = 直到長度為 4 的倍數
atob() 拋出 TypeError 包含非 ASCII 字元 先使用 TextEncoder
輸出亂碼 跳過了 UTF-8 編碼 一律先編碼為位元組再進行 Base64

根據 AskPython,計算缺少的填充量:padding_needed = (4 - len(data) % 4) % 4,然後附加對應數量的 = 字元。

應用場景:JWT 與 Data URI

JWT(JSON Web Token)結構

部分 內容 編碼方式
標頭(Header) 演算法 + Token 類型 Base64URL
承載(Payload) 宣告(使用者資料、過期時間) Base64URL
簽章(Signature) HMAC 或 RSA 簽章 Base64URL

JWT 通常以 eyJ 開頭——這是 {(JSON 左花括號)的 Base64URL 編碼。

JWT 結構的視覺化示意圖,展示其 3 個 Base64URL 組成部分。

不同場景下的 Base64 與 Base64URL 選擇

應用場景 編碼方式 填充
JWT Token Base64URL 省略
Data URI(嵌入圖片) 標準 Base64 必填
HTTP Basic 認證 標準 Base64 必填
URL 查詢參數 Base64URL 省略

總結

4 步流程:UTF-8 位元組 → Base64 → 將 +/ 替換為 -_ → 去除填充。JavaScript 中使用 TextEncoder,Python 中使用 base64.urlsafe_b64encode(),Node.js 中使用 Buffer。遵循 RFC 4648 以確保跨系統相容性。Base64URL 是編碼而非加密——如需安全保障,請使用 AES-256 或 TLS。

常見問題

Base64URL 和加密是一回事嗎?

不是。Base64URL 是可逆編碼——任何人都可以在沒有金鑰的情況下解碼。請使用 AES-256TLS/SSL 來保護敏感資料。

為什麼 Base64URL 在標準 Base64 解碼器中會失敗?

標準解碼器期望 +/= 填充。Base64URL 使用 -_ 並省略填充。解碼前需要先還原字元替換並恢復填充。

為什麼 JWT 中省略了填充?

= 字元在 URL 中會變成 %3D,讓字串更長且更難閱讀。RFC 4648 允許省略填充,因為解碼器可以在沒有填充標記的情況下重建原始長度。

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *