我有一个iOS应用程序正在调用Web服务的一些XML数据,例如:的NSXMLParser initWithContentsOfURL - 解析gzip压缩响应
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
[xmlParser setDelegate:self];
[xmlParser setShouldProcessNamespaces:NO];
[xmlParser setShouldReportNamespacePrefixes:NO];
[xmlParser setShouldResolveExternalEntities:NO];
[xmlParser parse];
我一直得到一个错误:
Error parsing XML: The operation couldn’t be completed.
(NSXMLParserErrorDomain error 31.)
错误31是“NSXMLParserUnknownEncodingError”。我在WireShark中嗅探了HTTP响应,结果发现Web服务正在发送带有GZIP数据的“Content-Encoding:gzip”,其原因是因为从iOS发送的请求设置了“Accept-Encoding :gzip,deflate“在HTTP标头中。似乎initWithContentsOfURL告诉它可以处理gzip的数据时,它实际上不能。
我猜我需要加载Web服务器响应到NSData中,然后通过解压缩方法运行它以获取NSString,然后将该字符串传递给NSXMLParser。
我的问题是,做这个解压缩的最好方法是什么? zlib的?从iOS内部链接到ZLib的任何问题?
谢谢
有状态
附:我用osx标记了这一点,因为我想这个问题也会出现在那里,因为NSXMLParser是一个基础类。
您可能想要以异步方式添加额外的好处:在将数据发送到NSXMLParser之前,您将能够检查数据。这可能是错误的地方。 –
感谢Nikita和Steven的出色和快速反应。 – Stateful