代码之家  ›  专栏  ›  技术社区  ›  Jessedc

在韩文的字形群中搜索或比较

  •  6
  • Jessedc  · 技术社区  · 15 年前

    在我当前执行的 UISearchBarController 我在用 [NSString compare:] 里面 filterContentForSearchText:scope: 委托方法将基于其名称属性的相关对象返回到结果 UITableView 当你开始打字的时候。

    到目前为止,这在英语和韩语中都很有用,但我想做的是在 NSString 的已定义字符簇。这只适用于一手语言,其中韩语是其中之一。

    在英语中, compare: 在每次输入字母后都返回新的结果,但在韩语中,结果是在您完成一个可识别的字形集群后生成的。我希望能够通过构成一个音节的单个元素搜索Korean对象的名称属性。

    有人能解释一下如何处理这个问题吗?我相信这与手工搜索UTF16字符或使用较低级别的类有关。

    干杯!

    下面是一个不起作用的具体示例:

    `NSString *string1 = @"이"; 
    `NSString *string2 = @"ㅣ";
    NSRange resultRange = [[string1 decomposedStringWithCanonicalMapping] rangeOfString:    [string2 decomposedStringWithCanonicalMapping] options:(NSLiteralSearch)];
    

    结果总是nsnotfound,有或没有 decomposedStringWithCanonicalMapping .

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Lawrence    15 年前

    我不是专家,但我认为你不太可能为你想要的找到一个干净的解决方案。韩国字符的unicode值和它组成的字形之间似乎没有任何关系。

    例如,“_”是\uc774,“_”是\u3163。从nsstring的角度来看,它们只是两个不同的字符,彼此之间没有特定的关系。

    我怀疑您必须在字符和它们的字形之间找到或创建一个显式的映射,然后编写自己的搜索函数来参考这个映射。

    This very long page on Unicode Korean 如果是这样的话,可以帮到你。它有一个包含所有字符的表,显示了字符编号方式与其组件之间的某种结构化关系。

        2
  •  1
  •   Don    15 年前

    如果你使用 compare:options 对于nsliteralString,它应该逐字符比较,即Unicode代码点,而不考虑图形。的默认行为 compare: 是不使用选项。你可以使用 - decomposedStringWithCanonicalMapping 获取输入字符串的Unicode字节,但我不确定这将如何与 比较: .