标识符设计与实现全解析
1. 标识符格式
在设计标识符时,我们期望能使用 ASCII 提供的全部 128 个字符,甚至是 Unicode 标准能表示的所有字符串。但我们必须考虑标识符的一个重要特性:易于阅读、分享和复制。这意味着要避免使用那些容易与其他字符混淆,或者可能在 HTTP 请求中使 URL 变得模糊的 ASCII 字符。基于此,Crockford’s Base 32 编码是一种非常实用的序列化格式。
Crockford’s Base 32 编码仅使用 32 个可用的 ASCII 字符,而非全部 128 个。它包含 A - Z 和 0 - 9,但排除了许多特殊字符(如斜杠)以及 “I”、”L”、”O” 和 “U”。前三个字符被排除是因为可能会引起混淆(”I” 和 “l” 可能与 “1” 混淆,”O” 可能与 “0” 混淆),而 “U” 被排除是为了避免标识符中出现英语脏话。
对于排除 “L” 可能会让人感到困惑,虽然大写的 “L” 不会与其他字符混淆,但小写的 “l” 可能会与 “1” 混淆。这种编码格式有一个单一的规范形式,由大写字母(排除上述提到的字符)和 0 - 9 组成,并且在解码各种输入时对错误的包容性更强。例如,算法会假设小写的 “l” 是误写为数字 “1”,并按此处理。这种大小写不敏感的特性也适用于其他可能混淆的字符,如 “O” 和 “o” 会被视为 “0”。
此外,Crockford’s Base 32 编码将连字符视为可选的,我们可以为了提高可读性而添加连字符。例如,ID “abcde - 12345 - ghjkm - 67890” 在 Crockford’s Base 32 中的规范表示为 “ABCDE12345GHJKM6789
超级会员免费看
订阅专栏 解锁全文
172万+

被折叠的 条评论
为什么被折叠?



