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,而不是数字一百。