2010-01-29 9 views
6

Ahora sé que xCode hace automaticamente el decrompession GZip para usted dentro:iPhone y gzip

NSData *data = [NSData dataWithContentsOfURL:URL]; 

y funciona si apuntar a un archivo Gzip en mi servidor. Pero ya que mi contenido es dinámico, tengo un script PHP que en lugar de crear un archivo gzip, así:

$zp = gzopen($file, "r"); 
$data = gzread($zp, $filesize); 
gzclose($zp); 

codificar mis propios datos con:

echo gzencode($data, 9); 

Con esta agrego las siguientes cabeceras :

header("Content-Type: application/x-gzip"); 
header("Content-Encoding: gzip"); 
header("Accepts-Encoding: gzip"); 

Cuando hojeo a la dirección URL, el navegador quiere descargar el archivo automáticamente y yo soy capaz de descomprimir en mi Mac y ver su contenido. Sin embargo, cuando intento leerlo a través de xCode, no funciona.

NSData *data = [NSData dataWithContentsOfURL:URL]; 
NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSLog (content); //returns only data when pointed directly to a Gzip file 

¿Olvidé decir algo?

+4

sí. te estás olvidando de aceptar tus respuestas !! (Lo siento, no pude resistir!) –

+0

Está utilizando NSLog incorrectamente. Use una cadena de formato: 'NSLog (@"% @ ", contenido);' – gerry3

+0

Recién salido de interés, ¿por qué querría hacer esto? ¿No sería mucho más simple usar mod_deflate y no requeriría ninguna intervención manual como esta? – djskinner

Respuesta

25

Si descarga algo con el tipo de contenido application/x-gzip, el sistema de carga de la url no lo descomprimirá. Creo que el data que recibió todavía está codificado en gzip.

Puede usar mis adiciones NSData para hacer frente a esto. Ver http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.m

+0

upvoted por ser increíblemente útil - gracias por la categoría! –