首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自NSString的isEqualToString的奇怪结果

来自NSString的isEqualToString的奇怪结果
EN

Stack Overflow用户
提问于 2011-07-26 11:25:53
回答 2查看 670关注 0票数 3

我经常遇到(很少见的) NSStrings返回不相等的情况,尽管它们在控制台中打印时看起来完全一样。例如:

代码语言:javascript
复制
[string1 isEqualToString:string2]
> comparing 'angelo debarre' to 'angelo debarre'

总是返回NO。我尝试过使用NSString的stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet],但仍然没有成功。我也尝试过使用compare:localizedCaseInsensitiveCompare:等比较器,但总是得到相同的结果。你知道我可能忽略了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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应用于任意文本。因为它们消除了许多格式差异,所以它们将阻止与许多旧字符集之间的往返转换,并且除非被格式标记取代,否则它们可能会删除对文本语义很重要的差异。最好将这些规范化形式视为类似于大写或小写的映射:在某些上下文中可用于识别核心含义,但也可对文本执行可能并不总是合适的修改。它们可以更自由地应用于字符集受限的域。

票数 7
EN

Stack Overflow用户

发布于 2011-07-26 11:43:07

我敢打赌,一个是空格,另一个是不间断空格。修剪仅删除前缀和后缀处的聊天字符。这不会影响内部空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6824906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档