iPhone和GZip

Mar*_*ark 6 iphone gzip nsdata

现在我知道xCode会自动为你做GZip decrompession:

NSData *data = [NSData dataWithContentsOfURL:URL];
Run Code Online (Sandbox Code Playgroud)

如果我指向我服务器上的Gzip文件,它确实有效.但由于我的内容是动态的,我有一个PHP脚本,而不是像这样创建一个gzip文件:

$zp   = gzopen($file, "r");
$data = gzread($zp, $filesize);
gzclose($zp);
Run Code Online (Sandbox Code Playgroud)

我用以下代码编码自己的数据:

echo gzencode($data, 9);
Run Code Online (Sandbox Code Playgroud)

有了这个,我添加以下标题:

header("Content-Type: application/x-gzip");
header("Content-Encoding: gzip");
header("Accepts-Encoding: gzip");
Run Code Online (Sandbox Code Playgroud)

当我浏览到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
Run Code Online (Sandbox Code Playgroud)

我忘记了什么吗?

Ste*_*ntz 25

如果您下载内容类型为application/x-gzip的内容,则网址加载系统不会为您解压缩.我认为data你收到的仍然是gzip编码.

您可以使用我的NSData添加来处理此问题.见http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.m