在韩文的字素簇中进行搜索或比较

问题描述 投票:6回答:2

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

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

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

任何人都无法阐明该如何处理吗?我确定这与手动搜索UTF16字符或使用较低级别的类有关。

干杯!

这是一个不起作用的特定示例:

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

结果始终为NSNotFound,带有或不带有decomposedStringWithCanonicalMapping

有什么想法吗?

iphone objective-c utf-8 nsstring utf-16
2个回答
2
投票

我不是专家,但是我认为您不太可能找到想要的解决方案。朝鲜语字符的Unicode值与其组成的字素之间似乎没有任何关系。

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

我怀疑您将不得不在字符及其字素之间找到或创建一个显式映射,然后编写自己的搜索函数来查询该映射。

This very long page on Unicode Korean可以为您提供帮助。它具有所有字符的表,该表建议了字符的编号方式及其组成部分之间的结构化关系。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.