Tengo un servicio web que se ejecuta en Windows Azure que devuelve JSON que consumo en mi aplicación de iPhone.Comprimir/Descomprimir NSString en objetivo-c (iphone) usando GZIP o desinflar
Desafortunadamente, Windows Azure no parece ser compatible con la compresión de respuestas dinámicas (larga historia), así que decidí evitarlo al devolver un paquete JSON descomprimido, que contiene una cadena comprimida (usando GZIP).
por ejemplo
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
... donde valor es la cadena comprimida de un objeto complejo representado en JSON.
Esto fue realmente fácil de implementar en el servidor, pero por mi vida no puedo encontrar la manera de descomprimir un NSString comprimido en un NSString descomprimido, todos los ejemplos que puedo encontrar para zlib, etc. tratan con archivos etc.
¿Alguien me puede dar alguna pista sobre cómo hacer esto? (También me gustaría una solución que utiliza desinflado ya que podría cambiar la implementación del lado del servidor para usar desinflar también).
Gracias!
Steven
Edición 1: Aaah, veo que ASIHTTPRequest está usando la siguiente función en su código fuente:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
... y estoy consciente de que puedo convertir NSString a NSData, así que veré si esto me lleva a cualquier parte.
Editar 2: Desafortunadamente, el método descrito en Editar 1 no me llevó a ninguna parte.
Editar 3: Siguiendo los consejos a continuación sobre la codificación/decodificación base64, se me ocurrió el siguiente código. El codificadoGzippedString es como usted puede adivinar, una cadena "Hola, mi nombre es Steven Elliott" que se gzipped y luego se convierte en una cadena de base64. Desafortunadamente, el resultado que imprime con NSLog es simplemente blanco.
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);
Hola, ¿Puedes proporcionar algún enlace exacto al marco? –
http://www.chilkatsoft.com/downloads_ios.asp – dirkoneill
cómo usar el marco chilkat? –