iPhone и GZip - PullRequest
       33

iPhone и GZip

6 голосов
/ 29 января 2010

Теперь я знаю, что xCode автоматически выполняет декомпрессию GZip за вас:

NSData *data = [NSData dataWithContentsOfURL:URL];

И это работает, если я указываю на файл Gzip на моем сервере. Но так как мой контент динамический, у меня есть PHP-скрипт, который вместо этого создает файл gzip, например:

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

Я кодирую свои данные с помощью:

echo gzencode($data, 9);

С этим я добавляю следующие заголовки:

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

Когда я просматриваю URL, мой браузер хочет автоматически загрузить файл, и я могу разархивировать его на своем Mac и просмотреть его содержимое. Однако, когда я пытаюсь прочитать его через xCode, он не будет работать.

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

Я что-то забыл?

1 Ответ

25 голосов
/ 29 января 2010

Если вы загружаете что-то с типом контента application / x-gzip, система загрузки URL не распакует это для вас. Я думаю, что data, который вы получили, все еще закодирован gzip.

Вы можете использовать мои дополнения NSData, чтобы справиться с этим. Смотри http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.m

...