Komprimieren / dekomprimieren Sie NSString in Ziel-c (iphone) mit GZIP oder deflate

8

Ich habe einen Web-Service auf Windows Azure, der JSON zurückgibt, den ich in meiner iPhone App verwende.

Leider scheint Windows Azure die Komprimierung dynamischer Antworten noch nicht zu unterstützen (lange Geschichte), also habe ich beschlossen, es zu umgehen, indem ich ein unkomprimiertes JSON-Paket zurückschicke, das eine komprimierte (mit GZIP) Zeichenkette enthält.

z. B.

%Vor%

... wobei Wert die komprimierte Zeichenfolge eines komplexen Objekts ist, das in JSON dargestellt wird.

Dies war wirklich einfach auf dem Server zu implementieren, aber für das Leben von mir kann ich nicht herausfinden, wie man einen gezippten 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 ändern könnte, um Deflate auch zu verwenden).

Danke !!

Steven

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

%Vor%

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

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

Edit 3: Nachdem ich die folgenden Hinweise zur base64-Kodierung / Dekodierung gemacht habe, habe ich den folgenden Code gefunden. Der codedGzippedString ist, wie Sie erraten können, eine Zeichenfolge "Hallo, mein Name ist Steven Elliott", die gezippt und dann in eine Base64-Zeichenfolge konvertiert wird. Leider ist das Ergebnis, das mit NSLog druckt, einfach leer.

%Vor%     
Steven Elliott 10.06.2010, 15:34
quelle

3 Antworten

3

Nach all dieser Zeit habe ich endlich eine Lösung für dieses Problem gefunden!

Keine der obigen Antworten hat mir geholfen, so vielversprechend sie auch aussahen. Am Ende war ich in der Lage, die Zeichenfolge auf dem Server mit gzip mit dem chilkat Framework für .net zu komprimieren ... und dann auf dem iPhone mit dem chilkat Framework für iOS zu dekomprimieren (noch nicht veröffentlicht, aber verfügbar, wenn Sie die Typ direkt).

Das chilkat-Framework hat es super gemacht, dem Entwickler so große Daumen zu machen!

    
Steven Elliott 07.04.2011, 21:44
quelle
1

Ihre "komprimierte" Zeichenkette ist keine rohen GZIP-Daten, sie ist in einer Kodierung, die diese Bytes in einer Zeichenkette speichern lässt - sieht aus wie Base-64 oder so ähnlich. Um ein NSData daraus zu machen, müssen Sie es in die NSData decodieren.

Wenn es wirklich Base-64 ist, schaut euch diesen Blog-Beitrag und einen begleitenden Code an: Ссылка was tun wird, was Sie wollen.

Sobald Sie ein NSData-Objekt haben, wird die ASIHTTPRequest-Methode wahrscheinlich wie Sie wollen.

    
Ben Zotto 14.06.2010 22:37
quelle
0

Das hat bei mir funktioniert: aus einer Zeichenfolge gzipeed, dann Base64 codiert zu entzippter String (alle utf8).

%Vor%     
RabinDev 01.10.2010 13:40
quelle