【问题标题】:comparing NSStrings with Ä,Ö,Ü比较 NSStrings 与 Ä,Ö,Ü
【发布时间】:2012-04-27 16:18:21
【问题描述】:

我遇到了一个奇怪的问题。 我有一个 UITextField 和一个 NSString ,我想使用 isEqualtoString 方法进行比较。 只要字符串不包含德语变音符号如 Ä,Ö,Ü 一切都可以正常工作,但如果他们这样做了,它就不再工作了。 NSLog 正确地给出了 Umlaute-Strings。

 NSLog([currentAnswer lowercaseString]);
 NSLog([[self.antwortTextField text]lowercaseString]);

if ([[currentAnswer lowercaseString] isEqualToString:[[self.antwortTextField text]lowercaseString]]) {......}

我必须以某种方式格式化字符串吗?这个问题快把我逼疯了!

【问题讨论】:

标签: objective-c ios cocoa-touch nsstring diacritics


【解决方案1】:

您可以使用高级NSString比较方法,例如:

- (NSComparisonResult)compare:(NSString *)aString
                      options:(NSStringCompareOptions)mask
                        range:(NSRange)range
                       locale:(id)locale

然后指定高级选项。您可能感兴趣的具体选项:

  • NSCaseInsensitiveSearch
  • NSDiacriticInsensitiveSearch
  • NSWidthInsensitiveSearch

【讨论】:

  • 对不起,我对 Objective-C 比较陌生。我该怎么做?我完全不知道为什么它首先不起作用。这不像德语是一种古老的语言或任何东西;-)
  • 可能是bool isEqual = NSOrderedSame == [str1 compare:str2 options:NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch | NSWidthInsensitiveSearch];,或者一些选项的组合。原因可能是语言,也可能是语言环境、编码或……
  • 其实,最主要的是你想使用没有NSLiteralSearch的任何-compare...方法。其他选项可用于其他目的。 -isEqual:-isEqualToString: 都使用 NSLiteralSearch,这意味着同一个字母的两个不同表示比较不同。例如,“Ä”可以是 U+00C4(带分音符号的拉丁文大写字母 A)或 U+0041(拉丁文大写字母 A)后跟 U+0308(组合分音符号)。通过字面比较,它们是不同的;对于非文字比较,相同。
猜你喜欢
  • 2020-11-10
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2019-06-08
  • 2012-08-14
  • 2015-05-10
相关资源
最近更新 更多