我正在将来自 XML 的字符串与另一个字符串进行比较,结果显示它们不相等。但在 NSLog() 中两者都是相同的(例如 Valore Books )。
然后我检查了 XML 的来源,我知道实际的字符串是 "Valore Books" 和 实际上是一个空间。但问题是当我将它与@“Valore Books”进行比较时,它说两者都不相同。
该怎么办 ??
我正在将来自 XML 的字符串与另一个字符串进行比较,结果显示它们不相等。但在 NSLog() 中两者都是相同的(例如 Valore Books )。
然后我检查了 XML 的来源,我知道实际的字符串是 "Valore Books" 和 实际上是一个空间。但问题是当我将它与@“Valore Books”进行比较时,它说两者都不相同。
该怎么办 ??
注意:我正在用一个实际上对这个问题正确的答案替换我的原始答案。很抱歉最初的误解。
以下行将取消转义字符串中的 html 实体。
NSString *A = @"Valore Books";
NSString *B = (NSString *)CFXMLCreateStringByUnescapingEntities(NULL, (CFStringRef)A, NULL);
我找不到任何更高级别的等效功能,但它的性能应该非常出色。如果我正确阅读了文档,您可以传入一个 CFDictionaryRef 作为第三个参数来指定额外的转换,但似乎这可以很好地完成标准转换。
文档在这里。
请注意,无论何时将这些字符串拉入程序,而不是每次比较时都处理编码可能是一个好主意。
还发现了您需要考虑的第二部分。 不仅仅是一个空格,它是一个不间断的空格,上面的代码将其转换为 \312 而不是标准空格。这些实际上是编码中的单独字符,当您进行字符串比较时,它将失败。
也许使用 #32 替换 #160 是最简单的
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
然后通过 unescape 运行它。
我也刚想到CFXMLCreateStringByUnescapingEntities
iPhone 上不可用。 这是一个示例的链接,该示例显示了如何在 iphone 上进行类似的转换。
是一个不间断的空格(Unicode 值 U+00A0) 常规空格(在@“Valore Books”中)具有 Unicode 值 U+0020。所以不是同一个字符,两个字符串不相等。
我使用谷歌提供的字符串解析实用程序解决了这个问题。谢谢大家。