Tôi có một dịch vụ web chạy trên Windows Azure trả về JSON mà tôi sử dụng trong ứng dụng iPhone của mình. Thật không may, Windows Azure dường như không hỗ trợ nén phản hồi động (câu chuyện dài) vì vậy tôi quyết định đi xung quanh nó bằng cách trả về một gói JSON không nén, có chứa một chuỗi nén (sử dụng GZIP).Nén/giải nén NSString trong mục tiêu-c (iphone) bằng GZIP hoặc giảm phát
ví dụ
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
... nơi giá trị là chuỗi nén của một đối tượng phức tạp đại diện trong JSON. Điều này thực sự dễ thực hiện trên máy chủ, nhưng đối với cuộc sống của tôi, tôi không thể tìm ra cách giải nén một NSString được nén vào một NSString không nén, tất cả các ví dụ tôi có thể tìm kiếm cho zlib vv là xử lý các tệp v.v.
Có ai cho tôi bất kỳ manh mối nào về cách thực hiện việc này không? (Tôi cũng sẽ được hạnh phúc cho một giải pháp sử dụng deflate như tôi có thể thay đổi việc thực hiện phía máy chủ để sử dụng deflate quá).
Cảm ơn !!
Steven
Sửa 1: Aaah, tôi thấy rằng ASIHTTPRequest đang sử dụng các chức năng sau đây trong đó là mã nguồn:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
... và tôi biết rằng tôi có thể chuyển đổi NSString để NSData, vì vậy tôi sẽ xem nếu điều này dẫn tôi bất cứ nơi nào!
Chỉnh sửa 2: Rất tiếc, phương pháp được mô tả trong Chỉnh sửa 1 không dẫn tôi đến bất kỳ đâu.
Chỉnh sửa 3: Làm theo lời khuyên dưới đây về mã hóa/giải mã base64, tôi đã đưa ra mã sau. EncodedGzippedString là như bạn có thể đoán, một chuỗi "Xin chào, tên tôi là Steven Elliott" được gzipped và sau đó chuyển đổi thành chuỗi base64. Thật không may, kết quả in bằng NSLog chỉ là trống.
NSString *encodedGzippedString = @"GgAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyK+uE6X2SJPiyZ93eaX+TI9Lcuiatvx/wOwYc0HGgAAAA==";
NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString];
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData];
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", unGzippedJsonString);
Xin chào, Bạn có thể cung cấp bất kỳ liên kết chính xác nào đến khung công tác không? –
http://www.chilkatsoft.com/downloads_ios.asp – dirkoneill
cách sử dụng khung chilkat? –