NSPredicate 和丹麦字母 å 给出错误的结果
Posted
技术标签:
【中文标题】NSPredicate 和丹麦字母 å 给出错误的结果【英文标题】:NSPredicate and danish letter å gives wrong results 【发布时间】:2014-05-06 13:32:34 【问题描述】:丹麦语只有 3 个非标准字符:å
、ø
和 æ
。
当我尝试使用以下谓词搜索我的 Core Data
实体时:
name CONTAINS[cd] "ø" // correct results
name CONTAINS[cd] "æ" // correct results
name CONTAINS[cd] "å" // wrong results - with 'å' and 'a'
前 2 个谓词正常工作,但最后一个谓词不能正常工作。结果中同时包含“å”和“a”字母。
只有这一个字母有什么特别之处?
【问题讨论】:
【参考方案1】:我建议您将查询字符串设为小写并且不要使用 [cd] 作为谓词语句的一部分,这既是为了优化核心数据,也是为了返回正确的结果。
工作示例:
NSArray *ar = @[@"å",@"a",@"åa"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS %@", @"å"];
NSArray *filteredArray = [ar filteredArrayUsingPredicate:predicate];
NSLog(@"Results: %@",filteredArray); // which returns (å,åa)
【讨论】:
【参考方案2】:这是变音符号搜索的正确行为。如果您指定 d
参数,核心数据将运行变音符号不敏感搜索。这意味着它会忽略所有重音符号。
该字符是“特殊”的,因为它具有多种 unicode 表示形式,并且您的搜索也会根据商店中保存的 unicode 值产生不同的结果。
在 objc.io https://www.objc.io/issues/9-strings/unicode/ 上的字符串问题中有一个关于该字符的很好的解释
【讨论】:
以上是关于NSPredicate 和丹麦字母 å 给出错误的结果的主要内容,如果未能解决你的问题,请参考以下文章
新作 | 丹麦Solrødgård水处理厂:可以野餐的污水厂 / Henning Larson
JavaMail:“域包含字符串中的控件或空格”错误消息,因为域包含丹麦字符
MacOS wc(wordcount)计算带有UTF-8字符Å的错误单词