使用方法
- 选择“编码”把文本转换为 Crockford Base32,或选择“解码”把它还原为文本。
- 保持选择 Crockford 变体,并确认“填充”已关闭。如果需要小写输出,可以勾选“小写”。
- 输入或粘贴内容,也可以打开文件。解码时会忽略连字符和空格。
- 复制结果,或将结果下载为文件。
什么是 Crockford Base32?
Douglas Crockford 设计这套 Base32 字母表,是为了让标识符便于人工阅读、输入和口头传达。它由 10 个数字和 22 个大写字母组成:0123456789ABCDEFGHJKMNPQRSTVWXYZ。去掉 I 和 L 是因为它们像数字 1,去掉 O 是因为它像 0,去掉 U 则是为了降低意外拼出不雅英文单词的可能。
每个符号承载 5 位,因此 5 个字节变成 8 个字符,与 RFC 4648 Base32 相同。符号按 ASCII 升序排列,所以大小写一致、不带填充的字符串,其排序与所编码的数据一致。Crockford 规范不使用填充,因此请保持“填充”选项关闭。
容错解码
Crockford 规范要求解码器接受人们实际输入的各种写法,本工具也是这样处理的:
- 大写和小写字母视为相同。
- 字母 O 读作数字 0,字母 I 和 L 读作 1。
- 为方便阅读长代码而插入的连字符会被忽略,空格和换行也一样。
字母 U 不是合法字符,出现时会连同位置一起报错。
字节、数字与 ULID
Crockford 的规范以数字为对象来描述编码,而本工具按 RFC 4648 的方式把字节序列切成 5 位一组,再用 Crockford 的符号表示。当总位数不是 5 的倍数时,基于数字的实现会把多出的零位补在前面,本工具则补在末尾,因此结果可能不同。
ULID 就是一个典型例子。它使用 Crockford 字母表,但把 128 位的值当作一个数字编码成 26 个字符,所以 ULID 的 16 个字节在这里编码出的字符串并不相同,而解码 ULID 得到的字节会错开两位。Crockford 规范中可选的校验符号(表示模 37 余数的额外字符)本工具不支持,既不会添加也不会验证。
编码规格
| 字母表 | 0-9 A-Z,去掉 I L O U |
|---|---|
| 输出体积 | 每 5 字节输出 8 个字符(160%) |
| 填充 | 无 |
| 标准 | Crockford Base32(2002) |
| 区分大小写 | 否 |
编码示例
| 输入 (UTF-8) | 输出 |
|---|---|
Hello, World! | 91JPRV3F5GG5EVVJDHJ22 |
Base64.is | 89GQ6S9P6GQ6JWR |
你好 | WJYT1SD5QM |
常见问题
Crockford Base32 区分大小写吗?
不区分。输出默认是大写,勾选“小写”可以改为小写。解码器两种写法都接受,即使在同一个字符串中混用也没问题。
字母表里为什么没有 I、L、O、U?
I 和 L 容易被看成 1,O 容易被看成 0,所以它们被排除在外,解码时会被当作对应的数字。排除 U 是为了让随机生成的代码不容易拼出冒犯性的英文单词。
本工具支持 Crockford 校验符号吗?
* ~ $ = U 这几个符号。本工具不会添加或验证校验符号,解码前请先将其删除。可以在这里解码 ULID 吗?
无法得到准确的 16 个字节。ULID 把 128 位当作一个数字编码,多出的位补在前面,而本工具按字节分组,把多出的位补在末尾。读取 ULID 的时间戳和随机部分请使用专门的 ULID 库。