在Unicode中查找类似的ASCII字符

时间:2010-08-04 08:39:00

标签: unicode ascii replace similarity fuzzy

有人知道在Unicode中查找与ASCII字符类似的字符的简单方法。一个例子是“CYRILLIC SMALL LETTER DZE(ѕ)”。我想搜索并替换类似的角色。类似的我的意思是人类可读。你不能通过观察它来看到差异。

2 个答案:

答案 0 :(得分:11)

正如其他评论者所指出的那样,Unicode normalisation(“兼容性字符”)在这里不会对你有所帮助,因为你不是在寻找官方对等,而是在寻找字形(字母形状)的相似之处。 (链接的Unicode技术报告仍然值得一读,因为它编写得非常好。)

如果我是你,为了免除你自己组装角色列表的繁琐工作,我会在homograph attacks上搜索资源:这是一种通过显示包含域名的URL来恶意误导网络用户的方法其中一些字母已被视觉上相似的字母所取代。另一个Unicode Technical Report,关于安全性,包含有关问题的部分。还有 - 这可能是你最需要的 - "confusables" table。这是另一篇主要是标点符号的文章,其中一些是ASCII,在non-ASCII code tables中具有视觉上相似的对应标记。

我希望你不是要问这个问题来构建这样的攻击。<​​/ p>

答案 1 :(得分:-1)

请参阅Unicode数据库:http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

每行描述一个unicode caharacter,例如:

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

,正如您所看到的,它没有指定兼容性字符。