使用方法
- 选择“编码”把文本转换为 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,而不是数字一百。