NSString in Objective-C (iPhone) mit GZIP komprimieren / dekomprimieren oder entleeren

ch verwende einen Webdienst unter Windows Azure, der JSON zurückgibt, das ich in meiner iPhone-App verwend

Leider scheint Windows Azure die Komprimierung dynamischer Antworten noch nicht zu unterstützen (lange Geschichte). Daher habe ich beschlossen, ein nicht komprimiertes JSON-Paket zurückzugeben, das eine komprimierte Zeichenfolge (mithilfe von GZIP) enthält.

z.

{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}

... wobei value die komprimierte Zeichenfolge eines in JSON dargestellten komplexen Objekts ist.

Dies war wirklich einfach auf dem Server zu implementieren, aber für mein ganzes Leben kann ich nicht herausfinden, wie man einen komprimierten NSString in einen unkomprimierten NSString dekomprimiert. Alle Beispiele, die ich für zlib usw. finden kann, befassen sich mit Dateien usw.

Kann mir jemand Hinweise geben, wie das geht? (Ich würde mich auch über eine Lösung freuen, die deflate verwendet, da ich die serverseitige Implementierung so ändern könnte, dass auch deflate verwendet wird.)

Vielen Dank!

Steven

Edit 1: Aaah, ich sehe, dass ASIHTTPRequest die folgende Funktion im Quellcode verwendet:

//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;

... und mir ist bewusst, dass ich NSString in NSData konvertieren kann, also werde ich sehen, ob mich das irgendwohin führt!

Edit 2: Leider hat mich die in Edit 1 beschriebene Methode nicht weitergebracht.

Edit 3: Nach den unten stehenden Hinweisen zur Base64-Codierung / -Decodierung habe ich den folgenden Code gefunden. Der encodedGzippedString ist, wie Sie sich vorstellen können, eine Zeichenfolge "Hallo, mein Name ist Steven Elliott", die mit einem Gzip versehen und dann in eine Base64-Zeichenfolge konvertiert wird. Leider ist das Ergebnis, das mit NSLog gedruckt wird, nur leer.

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);  

Antworten auf die Frage(6)

Ihre Antwort auf die Frage