У меня есть приложение для iOS, которое вызывает веб-сервис для некоторых XML-данных, например:
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».Я прослушал HTTP-ответ в WireShark, и оказалось, что веб-служба отправляет «Content-Encoding: gzip» с данными GZIP в теле, и причина, по которой он это делает, заключается в том, что запрос, отправляемый с iOS, устанавливает «Accept-Encoding»: gzip, deflate "в заголовках HTTP.Кажется, initWithContentsOfURL сообщает веб-серверам, что он может обрабатывать данные gzip, когда на самом деле это не так.
Я предполагаю, что мне нужно загрузить ответ веб-сервера в NSData, затем запустить его через метод декомпрессора, чтобы получить строку NSString, а затем передать эту строку в NSXMLParser.
У меня вопрос,какой лучший способ сделать эту декомпрессию?ZLib?Есть ли какие-либо проблемы со связью с ZLib из iOS?
Спасибо,
Stateful
PS Я пометил это также с помощью osx, так как я думаю, что эта проблема также будет присутствовать, поскольку NSXMLParser являетсяБазовый класс.