ios - 相同的字符显示不同的十六进制代码

标签 ios objective-c unicode nsstring

unichar c1 = 12098;
unichar c2 = 25991;

当我打印 This characters 显示以下值时,

(unichar) $2 = U+2f42 u'⽂'
(unichar) $3 = U+6587 u'文'

相同的字符但不同的十六进制代码。我想在这种不同的编码中识别相似的字符。喜欢下面

if(c1 == c2){
}

实际情况比这复杂。一组文本是使用字形从 pdf 文件编码中提取的文本,另一组是搜索文本词。

提前致谢。

最佳答案

Same character but different hex code.

完全相同的字符。一个是中文的写字;另一个是指许多相关词使用的部首。这就像字母“我”和单词“我”之间的区别。

差异是如此微不足道以至于 Unicode 宁愿不关心它,但为了兼容性不得不关心它。部首 U+2F42 对另一种形式具有“相容性分解”,因此您可以通过先将两个字符串归一化为 Normal Form KD 来比较它们是否相等。在 NSString 中,该操作是 decomposedStringWithCompatibilityMapping .

I want to identify similar characters

这可能是一个更广泛的问题 - 需要查看更多示例才能确定仅兼容性规范化是否可以满足您的需求。

识别通常看起来相似的字符是一项开放式任务。例如,不相关的希腊语 ν (nu) 和拉丁语 v 应该匹配吗?数字 0 和字母 O 怎么样?

Unicode TR39有confusables的概念对于通常在视觉上相似的字符,这是针对安全问题但可能有所帮助。 NSString 没有内置的东西来比较这些,所以你必须下载 confusables.txt并自己逐个字符映射。

关于ios - 相同的字符显示不同的十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22906103/

相关文章:

unicode - 无法理解如何让 Groovy 输出我的 unicode 字符串

ios - 使用以相同的方法以编程方式创建的 UIButtons 加载不同的 UIViewControllers

objective-c - 如何在 Objective-C 中设置 CAShapeLayer 透明?

iphone - nibNameOrNil 的真正含义是什么?

ios - UIActionSheet 在第二次单击按钮时关闭

iphone - iPhone 应用程序可以使用多少内存?

c++ - wifstream相当于_wfopen的 "mode"参数?

perl - Unicode 就绪字搜索 - 问题

ios - 使用 FileHandler 写入文件时出现问题

ios - 将闭包中的值分配给变量 Swift