【问题标题】:Search or compare within a Grapheme Cluster in Korean在韩语的字素簇内搜索或比较
【发布时间】:2011-01-07 14:20:06
【问题描述】:

在我当前的UISearchBarController 实现中,我在filterContentForSearchText:scope: 委托方法中使用[NSString compare:] 在您开始输入时根据其名称属性将相关对象返回到结果UITableView

到目前为止,这在英语和韩语中都很好用,但我想做的是在 NSString 定义的字符簇中进行搜索。这仅适用于少数几种语言,韩语就是其中之一。

在英语中,compare: 在您输入每个字母后返回新结果,但在韩语中,一旦您完成了一个已识别的字素簇,就会生成结果。我希望能够通过构成音节的各个元素来搜索我的韩语对象名称属性。

任何人都可以阐明如何解决这个问题吗?我确信它与手动搜索 UTF16 字符或使用较低级别的类有关。

干杯!

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

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

无论有没有decomposedStringWithCanonicalMapping,结果总是NSNotFound。

有什么想法吗?

【问题讨论】:

    标签: iphone objective-c utf-8 nsstring utf-16


    【解决方案1】:

    如果您将compare:options 与 NSLiteralString 一起使用,它应该逐个字符比较,即 Unicode 代码点,而不考虑字素。 compare: 的默认行为是不使用任何选项。您可以使用 - decomposedStringWithCanonicalMapping 来获取输入字符串的 Unicode 字节,但我不确定这将如何与 compare: 交互。

    【讨论】:

    • 感谢您抽出宝贵时间回复唐。你今天让我玩了一个小时。我已经为我正在尝试做什么的问题添加了一个具体示例。
    【解决方案2】:

    我不是专家,但我认为您不太可能找到适合您所需的干净解决方案。韩语字符的 Unicode 值与其组成的字素之间似乎没有任何关系。

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

    我怀疑您必须找到或创建字符与其字素之间的显式映射,然后编写您自己的搜索函数来查询此映射。

    This very long page on Unicode Korean 可以帮助您,如果涉及到的话。它有一个包含所有字符的表,表明字符编号方式与其组成部分之间存在某种结构化关系。

    【讨论】:

    • 劳伦斯,这个信息太棒了。有韩文的 iPhone 应用程序似乎在做我一直在尝试的事情;但我想我对韩语如何存储在 UTF8/16 中的假设是错误的。感谢您的回答,它肯定对我的查询有所启发。
    • 感谢您的帮助劳伦斯,我已接受您的回答;这是朝着正确方向迈出的一大步。
    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    相关资源
    最近更新 更多