有人知道在 Unicode 中查找与 ASCII 字符相似的字符的简单方法吗?一个例子是“西里尔小写字母DZE (ѕ)”。我想搜索并替换相似的字符。类似的意思是人类可读的。你看不出来有什么区别。
2 回答
正如其他评论者所指出的那样,Unicode 规范化(“兼容字符”)在这里不会对您有所帮助,因为您不是在寻找官方等价物,而是在寻找字形(字母形状)的相似性。(不过,链接的 Unicode 技术报告仍然值得一读,因为它写得非常好。)
如果我是你,为了省去你自己组装字符列表的繁琐工作,我会搜索有关同形异义词攻击的资源:这是一种通过显示包含某些字母的域名的 URL 来恶意误导 Web 用户的方法替换为视觉上相似的字母。另一份关于安全性的Unicode 技术报告包含有关该问题的部分。还有——这可能是你最需要的——一个“易混淆”表。这是另一篇主要包含标点符号的文章,其中一些是 ASCII,在非 ASCII 代码表中具有视觉上相似的对应物。
我确实希望你不是在问问题来构建这样的攻击。
请参阅 Unicode 数据库:http ://www.unicode.org/Public/UNIDATA/UnicodeData.txt 。
每行描述一个 unicode 字符,例如:
1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
如果该符号有任何类似(兼容)的字符,它将出现在<compat>
条目的字段中。在此示例中,0061
(ASCII a
) 与LATIN SMALL LETTER A WITH RIGHT HALF RING
Unicode 字符兼容。
至于你的角色,条目是
0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
如您所见,它没有指定兼容性字符。