使用方法
- 選擇「編碼」把文字轉換為 Base36,或選擇「解碼」把 Base36 還原為文字。
- 輸入或貼上內容,也可以開啟較小的檔案(約 20 KB 以內)。
- 如果輸出需要大寫字母,勾選「大寫」。
- 複製結果,或將結果下載為檔案。
什麼是 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.is | 76f8bz4veeatf7 |
你好 | 2h5exfqm65 |
常見問題
Base36 區分大小寫嗎?
不區分。輸出預設為小寫,勾選「大寫」可改為大寫字母,解碼器兩種寫法都接受。
為什麼其他工具得到的 Base36 結果不一樣?
Base36 沒有正式標準。有的工具編碼的是數字,有的編碼位元組,對前導零位元組的處理也各不相同。本工具把輸入位元組當作一個大整數編碼,並把每個前導零位元組寫成 0。
如何把一個數字轉換為 Base36?
請使用進位轉換器,它可以把十進位數顯示為 Base36 等多種進位。本頁把輸入當作文字或位元組處理,輸入 100 編碼的是字元 1、0、0,而不是數字一百。