1

我正在将来自 XML 的字符串与另一个字符串进行比较,结果显示它们不相等。但在 NSLog() 中两者都是相同的(例如 Valore Books )。

然后我检查了 XML 的来源,我知道实际的字符串是 "Valore Books" 和   实际上是一个空间。但问题是当我将它与@“Valore Books”进行比较时,它说两者都不相同。

该怎么办 ??

4

3 回答 3

2

注意:我正在用一个实际上对这个问题正确的答案替换我的原始答案。很抱歉最初的误解。

以下行将取消转义字符串中的 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 运行它。

我也刚想到CFXMLCreateStringByUnescapingEntitiesiPhone 上不可用。 这是一个示例的链接,该示例显示了如何在 iphone 上进行类似的转换。

于 2009-11-17T13:28:48.433 回答
0

  是一个不间断的空格(Unicode 值 U+00A0) 常规空格(在@“Valore Books”中)具有 Unicode 值 U+0020。所以不是同一个字符,两个字符串不相等。

于 2009-11-18T10:15:39.777 回答
0

我使用谷歌提供的字符串解析实用程序解决了这个问题。谢谢大家。

于 2012-02-16T09:42:12.937 回答