2010-01-29 38 views
6

Bây giờ tôi biết rằng Xcode automaticly hiện decrompession GZip cho bạn trong vòng:iPhone và GZip

NSData *data = [NSData dataWithContentsOfURL:URL]; 

Và nó làm việc nếu tôi trỏ đến một tập tin Gzip trên máy chủ của tôi. Nhưng kể từ khi nội dung của tôi là năng động, tôi có một kịch bản PHP rằng thay vì sau đó tạo ra một file gzip như vậy:

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

tôi mã hóa dữ liệu của riêng tôi với:

echo gzencode($data, 9); 

Với điều này tôi thêm các tiêu đề sau :

Khi tôi duyệt đến URL, trình duyệt của tôi muốn tải xuống tệp tự động và tôi có thể giải nén tệp trên máy Mac và xem nội dung đó. Tuy nhiên khi tôi cố gắng đọc nó thông qua xCode nó sẽ không hoạt động.

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 

Tôi có quên điều gì đó không?

+4

vâng. bạn quên chấp nhận câu trả lời của mình !! (xin lỗi không thể cưỡng lại!) –

+0

Bạn đang sử dụng NSLog không chính xác. Sử dụng một chuỗi định dạng: 'NSLog (@"% @ ", nội dung);' – gerry3

+0

Chỉ cần không quan tâm, tại sao bạn muốn làm điều này? Sẽ không sử dụng mod_deflate đơn giản hơn nhiều và không yêu cầu bất kỳ sự can thiệp thủ công như thế này? – djskinner

Trả lời

25

Nếu bạn tải xuống nội dung nào đó có ứng dụng loại nội dung/x-gzip, hệ thống tải url sẽ không giải nén nó cho bạn. Tôi nghĩ rằng data mà bạn nhận được vẫn được mã hóa gzip.

Bạn có thể sử dụng các bổ sung NSData của tôi để giải quyết vấn đề này. Xem http://github.com/st3fan/cocoa-utils/blob/master/src/NSDataGZipAdditions.m

+0

được bình chọn là không thể tin được - nhờ có thể loại này! –