最容易搞混的是大写的I和小写的l,在我们最常用的Arial和Calibri字体中这两个很难肉眼区分。类似的模糊字符还有:
- B = 8
- G = 6
- I = 1 = l(小写L)
- O = 0
- Q = D
- S = 5
- Z = 2
如何解决这个问题呢?
在网站上显示模糊字符时,强烈建议选择一种能增强文本可读性的字体,这将有助于确保减少混淆。
多数等宽字体都是不错的选择,我个人比较喜欢Consolas,其实Tahoma 和 Lucida Console也不错。下面就是这三种字体的显示效果
Consolas: 0OB8i1lIb6S5Z2
Tahoma: 0OB8i1lIb6S5Z2
Lucida Console: 0OB8i1lIb6S5Z2
Consolas是Windows里记事本的标准字体,因此当你分不清字符串中的模糊字符时,你可以打开记事本,把字符串复制黏贴过去。
也可以黏贴到下面这个文本栏,它会自动变成放大的consolas字体。
在编程时我们通常使用下面两种方法解决模糊字符的问题,在许多应用的设置里也有相关选项。
1. 处理模糊性
如果您担心O0、1Il、8B或其他任何类似字符会搞混,那就将它们视为相同字符!
这就是Base32所做的。它将标准化为上述字符之一(比如数字018),并省略那些太相似的字符(在这种情况下是OIlB)。
当您从用户那里接收输入时,将被省略的字符映射到规范字符(例如,用数字零替换字母O)。
2. 消除所有模糊性
Base32仍然留下了可能被误认为模糊的字符,你也可以删除所有可能被视为模糊的字符(例如0O1Il8B)。