西里尔'С'和拉丁'C'的Unicode比较

时间:2013-10-14 00:00:35

标签: unicode normalization collation unicode-normalization accent-insensitive

我有一个混合使用unicode字符\ u0421,'С'和\ u0043,'C'的数据集。是否有某种unicode比较,认为这两个字符相同?到目前为止,我已经尝试了几种ICU校对,包括俄语校对。

2 个答案:

答案 0 :(得分:4)

没有Unicode比较根据字形的视觉识别将字符视为相同。但是,Unicode技术标准#39,Unicode Security Mechanisms处理“混淆” - 由于视觉识别或相似性而可能彼此混淆的字符。它包括confusables以及“intentionally confusable”对的数据文件,即“使用统一字体设计时,任何特定字体的字形可能设计为相同形状的字符”,主要包括拉丁语和西里尔语或希腊语字母对,如C和С。您可能需要编写自己对此数据的使用代码,因为ICU似乎没有任何与可混淆概念相关的内容。

答案 1 :(得分:1)

当您查看http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt时,您会看到某些代码位置是针对使用相似的代码点进行注释的;但是,我不知道任何涵盖跨脚本的视觉相似性的广泛列表。你可能想要使用故意拼写错误来搜索URL欺骗,这在他们想出punycode时就已经讨论过了。除此之外,您最好的选择可能是使用正则表达式搜索预期之外的字符数据,并编译一系列特殊文本修复程序,如text = text.replace /с/, 'c'