Base36 編碼解碼

將文字、十六進位位元組或檔案轉換為由 10 個數字和 26 個字母組成的 Base36,也可以把 Base36 字串解碼回字節。可選擇大寫輸出。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 選擇「編碼」把文字轉換為 Base36,或選擇「解碼」把 Base36 還原為文字。
  2. 輸入或貼上內容,也可以開啟較小的檔案(約 20 KB 以內)。
  3. 如果輸出需要大寫字母,勾選「大寫」。
  4. 複製結果,或將結果下載為檔案。

什麼是 Base36?

Base36 用 10 個數字和 26 個拉丁字母表示資料,即 0-9 加 a-z。在不區分大小寫的前提下,這是用數字和字母能組成的最大字母表,所以 Base36 字串在會改變或忽略大小寫的系統中也能保持不變。每個字元約承載 5.17 位,輸出約為輸入的 1.55 倍,比 Base32 略短。

由於 36 不是 2 的冪,位元組無法直接按位分組。本工具把整個輸入看作一個大的無符號整數,再轉換為 36 進位,與 Base58 的做法相同。整數會丟失開頭的零位元組,所以每個前導零位元組都寫成一個 0,解碼時再恢復。輸入越大,這種運算越慢,因此本工具最多支援約 20 KB 的輸入。

Base36 的常見用途

  • 短 ID。短連結服務、訂單號和工單編號常把資料庫中的數字 ID 寫成 36 進位,例如 Reddit 的帖子和評論 ID 就使用 36 進位。
  • 不區分大小寫的場合。DNS 域名和部分檔案系統會忽略大小寫,IPFS 在子域名閘道器地址中使用 Base36 形式的部分識別符號,正是出於這個原因。
  • 程式碼中的數字。36 是大多數程式語言內建整數轉換所支援的最大進位。

如果大小寫能夠保留,又想得到最短的字母數字字串,Base62 更緊湊。

在程式碼中轉換 Base36 數字

本頁編碼的是位元組。如果要轉換整數,可以使用程式語言的內建函式,或使用進位轉換器:

// JavaScript
(1000000).toString(36)        // 'lfls'
parseInt('lfls', 36)          // 1000000
123456789012345678901234567890n.toString(36)   // 大數使用 BigInt

# Python
int('lfls', 36)               # 1000000
# Python 沒有內建的反向轉換函式

超過 Number.MAX_SAFE_INTEGER 時 parseInt 會丟失精度,更大的值需要自行把各位數字累加到 BigInt 中。

編碼規格

字母表0-9 a-z
輸出體積約 155%(大數進位轉換)
填充無
標準無正式標準
區分大小寫否

編碼範例

輸入 (UTF-8)輸出
Hello, World!fg3h7vqw7een6jwwnzmp
Base64.is76f8bz4veeatf7
你好2h5exfqm65

常見問題

Base36 區分大小寫嗎?

不區分。輸出預設為小寫,勾選「大寫」可改為大寫字母,解碼器兩種寫法都接受。

為什麼其他工具得到的 Base36 結果不一樣?

Base36 沒有正式標準。有的工具編碼的是數字,有的編碼位元組,對前導零位元組的處理也各不相同。本工具把輸入位元組當作一個大整數編碼,並把每個前導零位元組寫成 0。

有大小限制嗎?
有,約 20 KB,因為大數轉換的耗時會隨輸入增大而明顯增加。處理檔案或大量資料時,Base32 或 Base64 更合適。
如何把一個數字轉換為 Base36?
請使用進位轉換器,它可以把十進位數顯示為 Base36 等多種進位。本頁把輸入當作文字或位元組處理,輸入 100 編碼的是字元 1、0、0,而不是數字一百。