unichar c1 = 12098;
unichar c2 = 25991;
当我打印时此字符显示以下值,
(unichar) $2 = U+2f42 u'⽂'
(unichar) $3 = U+6587 u'文'
相同的字符,但不同的十六进制代码。我想在这种不同的编码中识别相似的字符。像吼叫一样
if(c1 == c2){
}
实际情况比这更复杂。一组文本是使用字形从pdf文件编码中提取的文本,另一组是搜索文本字。
提前致谢。
答案 0 :(得分:1)
这很难解释。 NSString
和Unicode下隐藏的内容比人们想象的要多得多。一些(视觉上相同的)角色可以有多个表示。
我建议您在objc.io阅读这两篇精彩的文章,这些文章将深入解释您的问题:
答案 1 :(得分:1)
相同的字符但不同的十六进制代码。
相当相同的字符。一个是中文写作;另一个是指许多相关词语所使用的词根。这就像字母'I'和'I'这两个字的区别。
差异非常小,以至于Unicode宁愿不关心它,但必须具备兼容性。基础U + 2F42与另一种形式具有“兼容性分解”,因此您可以通过将两个字符串归一化为Normal Form KD来比较它们。在NSString中,操作是decomposedStringWithCompatibilityMapping。
我想识别相似的字符
这可能是一个更广泛的问题 - 需要查看更多示例,以确定单独的兼容性规范化是否能满足您的需求。
识别通常看起来相似的角色是一项开放式任务。例如,否则与其他无关的希腊语ν(nu)和拉丁语v匹配?数字0对字母O怎么样?
Unicode TR39对于通常在视觉上相似的字符具有confusables的概念,其针对安全问题但可能有所帮助。 NSString没有内置任何内容来比较这些,所以你必须下载confusables.txt并自己进行逐个字符映射。