gpt4 book ai didi

ios - 使用土耳其语无点 i 进行字符串搜索

转载 作者:可可西里 更新时间:2023-11-01 03:30:06 25 4
gpt4 key购买 nike

当使用代码在文本 Çınaraltı Café 中搜索文本 Ci

NSStringCompareOptions options =
NSCaseInsensitiveSearch |
NSDiacriticInsensitiveSearch |
NSWidthInsensitiveSearch;
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"tr"];
NSRange range = [haystack rangeOfString:needle
options:options
range:NSMakeRange(o, haystack.length)
locale:locale];

我得到 range.location 等于 NSNotFound

这与首字母 Ç 上的变音符号无关,因为我在搜索 alti 时得到相同的结果,其中唯一的奇数字符是 ı。我还获得了搜索 Cafe 的有效匹配项,其中包含变音符号 (é)。

苹果文档 mention this situation作为 locale 参数的注释,我认为我正在关注它们。虽然我想我不是因为它不起作用。

如何搜索“i”以同时匹配“i”和“ı”?

最佳答案

我不知道这是否有助于回答,但也许可以解释为什么会这样。

我应该指出,我不是这方面的专家,但我出于自己的目的一直在研究这个问题,并且一直在做一些研究。

查看 Unicode collation chart for latin ,与 ASCII "i"(\u0069) 等效的字符不包括 "ı"(\u0131),而示例字符串中的所有其他字母都与您相同期望,即:

  • "c"(\u0063) 是否包含"Ç"(\u00c7)
  • "e"(\u0065) 是否包括"é"(\u00e9)

ı 字符作为 主要区别i 单独列出。对于说土耳其语的人(我不是)来说,这可能没有意义,但这是 Unicode 不得不说的,它确实符合您描述的问题的逻辑。

在 Chrome 中,您可以通过页内搜索看到这一点。在页面中搜索 ASCII i 会突出显示其 block 中的所有字符,并且不匹配 ı。搜索 ı 则相反。

相比之下,MySQL's utf8_general_ci collation table根据需要将大写 ASCII I 映射到 ı

因此,在对 iOS 一无所知的情况下,我假设它正在使用 Unicode 标准并通过此表将所有字符规范化为拉丁文。

至于如何将 ÇınaraltıCi 匹配 - 如果您不能覆盖排序规则表,那么也许您可以将 i 替换为您使用正则表达式搜索字符串,因此您可以搜索 Ç[iı]

关于ios - 使用土耳其语无点 i 进行字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com