2010-01-29 17 views
6

Ora so che xCode fa automaticly il decrompession GZip per voi entro:iPhone e gzip

NSData *data = [NSData dataWithContentsOfURL:URL]; 

E funziona se indico un file Gzip sul mio server. Ma dal momento che il mio contenuto è dinamico, Ho uno script PHP che piuttosto che creare un file gzip in questo modo:

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

ho codificare i miei dati con:

echo gzencode($data, 9); 

Con questo aggiungo le seguenti intestazioni :

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

Quando si naviga l'URL, il browser vuole scaricare il file in modo automatico e sono in grado di decomprimere sul mio Mac e visualizzare il suo contenuto. Tuttavia, quando provo a leggerlo tramite xCode, non funzionerà.

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 

sto dimenticando qualcosa?

+4

sì. ti stai dimenticando di accettare le tue risposte !! (sorry non ha potuto resistere!) –

+0

Stai utilizzando NSLog in modo errato. Usa una stringa di formato: 'NSLog (@"% @ ", contenuto);' – gerry3

+0

Solo per interesse, perché vorresti farlo? Non usare mod_deflate sarebbe molto più semplice e non richiederebbe alcun intervento manuale come questo? – djskinner

risposta

25

Se si scarica qualcosa con tipo di contenuto application/x-gzip, il sistema di caricamento dell'URL non lo decomprimerà automaticamente. Penso che lo data che hai ricevuto sia ancora codificato con gzip.

È possibile utilizzare le aggiunte di NSData per risolvere il problema. Vedi http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.m

+0

upvoted per essere incredibilmente utile - grazie per la categoria! –