1

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

简化,我有这个:

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

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

我已经调试了两天了。任何想法将不胜感激。

4

1 回答 1

1

这是错误的,因为您期望一个以 0 结尾的 utf-8 字符串stringWithUTF8String:

虽然原始字节不是 0 终止

你必须使用数据:

NSString *queryFragment = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
于 2012-12-22T17:55:25.853 回答