我经常遇到(很少见的) NSStrings返回不相等的情况,尽管它们在控制台中打印时看起来完全一样。例如:
[string1 isEqualToString:string2]
> comparing 'angelo debarre' to 'angelo debarre'总是返回NO。我尝试过使用NSString的stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet],但仍然没有成功。我也尝试过使用compare:和localizedCaseInsensitiveCompare:等比较器,但总是得到相同的结果。你知道我可能忽略了什么吗?
发布于 2011-07-26 12:25:51
尝试使用像- (NSString *)decomposedStringWithCompatibilityMapping这样的NSString Unicode规范化函数来分解字符串。兼容性映射(vs规范映射)应该是您想要的,因为它将视觉上相似的字符序列分解为相同的基本组件。不过,我还没有显式地查找不间断的空格是否被规范化为空格。
编辑:兼容性映射规范化有两种类型:分解和组合。合成的版本是- (NSString *)precomposedStringWithCompatibilityMapping。不确定哪一种在一般情况下工作得更好,但Unicode Standard Annex #15 (Unicode Normalization Forms)说以下KC/KD形式:
标准化形式KC另外折叠了兼容性等价字符之间的差异,这些字符在许多情况下被不当区分。例如,半角和全角片假名字符将规范化为相同的字符串,罗马数字和它们的字母等效项也是如此。
不能盲目地将规范化形式KC和KD应用于任意文本。因为它们消除了许多格式差异,所以它们将阻止与许多旧字符集之间的往返转换,并且除非被格式标记取代,否则它们可能会删除对文本语义很重要的差异。最好将这些规范化形式视为类似于大写或小写的映射:在某些上下文中可用于识别核心含义,但也可对文本执行可能并不总是合适的修改。它们可以更自由地应用于字符集受限的域。
发布于 2011-07-26 11:43:07
我敢打赌,一个是空格,另一个是不间断空格。修剪仅删除前缀和后缀处的聊天字符。这不会影响内部空间。
https://stackoverflow.com/questions/6824906
复制相似问题