6

これで、xCode が自動的に GZip デクロンペションを実行することがわかりました。

NSData *data = [NSData dataWithContentsOfURL:URL];

また、サーバー上の Gzip ファイルを指定すると機能します。しかし、私のコンテンツは動的であるため、次のように gzip ファイルを作成するのではなく、PHP スクリプトを使用しています。

$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

私は何かを忘れていますか?

4

1 に答える 1

25

コンテンツ タイプが application/x-gzip のコンテンツをダウンロードした場合、URL 読み込みシステムはそれを解凍しません。dataあなたが受け取った はまだ gzip でエンコードされていると思います。

これに対処するには、私の NSData 追加機能を使用できます。http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.mを参照してください。

于 2010-01-29T03:43:43.627 に答える