使用方法
- 选择“编码”把文本转换为 Base62,或选择“解码”把 Base62 还原为文本。
- 选择与目标系统一致的字母表顺序:0-9 A-Z a-z(默认)或 0-9 a-z A-Z。
- 输入或粘贴内容,也可以打开较小的文件(约 20 KB 以内)。
- 复制结果,或将结果下载为文件。
什么是 Base62?
Base62 使用 10 个数字、26 个大写字母和 26 个小写字母,是只由字母和数字组成的最大字母表,因此结果在 URL、文件名、数据库键和代码标识符中都无需转义。每个字符约承载 5.95 位,输出约为输入的 1.34 倍,几乎和 Base64 一样紧凑,却不含 +、/、=、- 或 _。
由于 62 不是 2 的幂,本工具与 Base58、Base36 一样,把整个输入当作一个大整数转换为 62 进制。每个前导零字节写成一个 0,以便在往返转换中保留下来。数据越大运算越慢,因此输入限制在约 20 KB 以内。
Base62 没有统一标准
与 Base64 不同,Base62 没有 RFC 标准,各种实现在以下方面存在差异,结果往往互不兼容:
- 字母表顺序。本工具提供
0-9A-Za-z(默认)和0-9a-zA-Z两种,另一些库则把字母放在数字前面。 - 前导零。有的实现像本工具一样为每个前导零字节保留一个
0,有的直接丢弃,固定长度的格式则会补齐到指定宽度。 - 编码对象。很多 Base62 函数编码的是整数(例如数据库 ID),而不是字节序列;还有的把数据切成固定大小的块分别编码。
如果来自其他系统的字符串在这里解码出乱码,可以换用另一种字母表;仍然不行的话,说明对方很可能使用了不同的方法。
Base62 的常见用途
短链接服务把自增 ID 转换为短代码,7 个 Base62 字符就能表示超过 3.5 万亿个值。KSUID 等可排序 ID 采用固定 27 个字符的 Base62 形式;许多服务也用 Base62 生成 API 密钥和令牌,因为双击就能选中整个字符串,粘贴到哪里都不会出问题。若要转换单个整数,可以使用进制转换器,或者写几行代码:
// JavaScript:把整数(BigInt)转换为 Base62
const A = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function toBase62(n) {
let s = '';
do { s = A[Number(n % 62n)] + s; n /= 62n; } while (n > 0n);
return s;
}
toBase62(123456789n); // '8M0kX'
编码规格
| 字母表 | 0-9 A-Z a-z |
|---|---|
| 输出体积 | 约 134%(大数进制转换) |
| 填充 | 无 |
| 标准 | 无正式标准 |
| 区分大小写 | 是 |
编码示例
| 输入 (UTF-8) | 输出 |
|---|---|
Hello, World! | 1wJfrzvdbtXUOlUjUf |
Base64.is | NWxjrFq4r3rv |
你好 | 19PqtKE1t |
常见问题
Base62 是 URL 安全的吗?
为什么 Base62 字符串解码后文字不对?
不同的 Base62 实现在字母表顺序和编码方法上各不相同。请在 0-9A-Za-z 和 0-9a-zA-Z 两种字母表之间切换试试;如果都不对,这个字符串很可能是由整数生成的,或使用了其他算法。
Base62 区分大小写吗?
区分。大写和小写字母代表不同的值,所以绝不能把 Base62 字符串统一转换为大写或小写。