У меня есть веб-служба, работающая в Windows Azure, которая возвращает JSON, который я использую в своем приложении для iPhone.
К сожалению, Windows Azure, похоже, пока не поддерживает сжатие динамических ответов (длинная история)поэтому я решил обойти это, возвращая несжатый пакет JSON, который содержит сжатую (используя GZIP) строку.
например,
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
... где value - сжатая строка сложного объекта, представленного в JSON.
Это было действительно легко реализовать на сервере, ноя не могу понять, как распаковать сжатый NSString в несжатый NSString, все примеры, которые я могу найти для zlib и т. д., имеют дело с файлами и т. д.
Может кто-нибудь дать мне какие-нибудь подсказкикак это сделать?(Я также был бы рад за решение, использующее deflate, поскольку я мог бы изменить реализацию на стороне сервера, чтобы использовать также deflate).
Спасибо !!
Стивен
Редактировать 1: Ааа, я вижу, что ASIHTTPRequest использует следующую функцию в своем исходном коде:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
... и я знаю, что могу преобразовать NSString в NSData,так что я посмотрю, приведет ли это меня куда-либо!
Edit 2: К сожалению, метод, описанный в Edit 1, никуда меня не привел.
Изменить 3: Следуя приведенным ниже советам относительно кодирования / декодирования base64, я придумал следующий код.Как вы можете догадаться, encodedGzippedString - это строка «Здравствуйте, меня зовут Стивен Эллиотт», которая распаковывается и затем преобразуется в строку base64.К сожалению, результат печати с использованием NSLog просто пуст.
NSString *encodedGzippedString = @"GgAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyK+uE6X2SJPiyZ93eaX+TI9Lcuiatvx/wOwYc0HGgAAAA==";
NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString];
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData];
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", unGzippedJsonString);