我有一個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