在Unicode中查找类似的ASCII字符

在Unicode中查找类似的ASCII字符,unicode,ascii,replace,similarity,fuzzy,Unicode,Ascii,Replace,Similarity,Fuzzy,有人知道一种简单的方法来查找类似于ASCII字符的Unicode字符吗。“ѕ”就是一个例子。我想搜索并替换相似的字符。我所说的相似是指人类可读的。通过查看它,您无法看到差异。请查看Unicode数据库: 每行描述一个unicode字符,例如: 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 正如您所看到的,它没有指定兼容字符。正如其他评论员所指出的,(“兼容字符”)

有人知道一种简单的方法来查找类似于ASCII字符的Unicode字符吗。“ѕ”就是一个例子。我想搜索并替换相似的字符。我所说的相似是指人类可读的。通过查看它,您无法看到差异。

请查看Unicode数据库:

每行描述一个unicode字符,例如:

1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;

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

正如其他评论员所指出的,(“兼容字符”)在这里对您没有帮助,因为您不是在寻找官方等价物,而是在字形(字母形状)中寻找相似性。(尽管如此,链接的Unicode技术报告仍然值得一读,因为它写得非常好。)

如果我是你,为了省去你自己整理字符列表的繁琐工作,我会搜索以下资源:这是一种通过显示包含域名的URL恶意误导web用户的方法,其中一些字母已被视觉上相似的字母替换。另一个是关于安全的,包含了关于这个问题的部分。还有,这可能是你最需要的,一个。这是另一篇主要使用标点符号的文章,其中一些标点符号是ASCII码,它们在图形中具有相似的视觉对应项


我所希望的是,您不是在问构造这种攻击的问题。

兼容性字段描述了一系列字符,这些字符的含义与所讨论的字符相同。在您的示例中,兼容的序列是
U+0061
(字母“a”),后跟
U+02BE
(“右半环”修饰符)。对于来自不同字母表的字符,存在兼容序列是非常不寻常的——这使得OP在没有更多信息的情况下不可能做到。OP声明“类似于ASCII字符”,这并不准确。如果您正在寻找带有右半环的“a”,如果没有其他可用的,您可以选择ASCII“a”。同意——在这种情况下。但如果您要查找类似西里尔字母的ASCII字符ѕ;,这正是OP所使用的例子,这是行不通的。@cHao:你是对的-正如我在回答中所说的,对于OP所要求的特定字符,兼容字符不是一个有用的方法。谢谢所有的好链接和解释。实际上,我是在努力防止这种攻击。:-)我想我会找到更多关于关键词“同形词攻击”的东西。这很好听:)。是的,这就是你需要的关键词!我编辑了一个链接(它指向一个过时的版本)。合法的用途:对于国际化测试,我有一个工具,可以使用相似的字符生成假外语文本。说英语的测试人员可以阅读“外国”文本,但他们也可以清楚地分辨出它不是硬编码的英语。虽然如果unicode字符非常相似,以至于你无法区分它们之间的区别,那么它就不起作用了。我主要做一些事情,比如给元音添加重音。我用这个来制作一个ircbot,如果它在频道中提到某人,它不会突出显示任何人:)
0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405