NSXMLParserDelegate解析器:foundCDATA:返回恶意数据

时间:2012-12-22 17:48:12

标签: objective-c nsxmlparser cdata

这真是令人费解。我有一个NSXMLParser读取包含许多CDATA部分的文档。但我发现在程序的某些运行中,我在这种方法中收到的数据是错误的。它并不总是会发生,但是当它确实发生时,文档的其他随机部分通常有大约100个字符,它应该实际读取的部分之后。

简化,我有这个:

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {
    NSString *queryFragment = [NSString stringWithUTF8String:[CDATABlock bytes]];
    ....
}

令人难以置信的是,在阅读同一文档的同一部分时,有时变量queryFragment正是我​​所期望的,但有时它最终会有随机垃圾。我曾经看过它读过CDATA块的末尾并获得原始XML!

我已经调试了两天了。任何想法都将深受赞赏。

1 个答案:

答案 0 :(得分:1)

这是错误的,因为你期望一个带有stringWithUTF8String:

的0终止的utf-8字符串

原始字节不是0终止

你必须使用数据:

NSString *queryFragment = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];