我有一個在Windows Azure上運行的Web服務,它返回我在iPhone應用程序中使用的JSON。不幸的是,Windows Azure似乎不支持壓縮動態響應(長篇故事),所以我決定通過返回一個包含壓縮(使用GZIP)字符串的未壓縮JSON包來繞過它。在使用GZIP或deflate的objective-c(iphone)中壓縮/解壓縮NSString
e.g
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
...其中值是在JSON表示的複合物的壓縮字符串。
這真的很容易在服務器上實現,但對於我的生活,我無法弄清楚如何將壓縮後的NSString解壓縮爲未壓縮的NSString,我可以找到zlib等的所有示例都處理文件等
任何人都可以給我任何線索如何做到這一點? (我也很樂意使用deflate的解決方案,因爲我可以將服務器端實現改爲使用deflate)。
謝謝!
史蒂芬
編輯1:啊哈,我看到ASIHTTPRequest在它使用下面的函數的源代碼:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
...和我知道,我可以轉換的NSString NSData,所以我會看看這是否導致我的任何地方!
編輯2:不幸的是,編輯1中描述的方法並沒有引導我到任何地方。
編輯3:根據以下關於base64編碼/解碼的建議,我想出了以下代碼。 encodedGzippedString就像你猜測的那樣,是一個字符串「Hello,我的名字是Steven Elliott」,它被gzip壓縮,然後轉換爲base64字符串。不幸的是,使用NSLog打印的結果只是空白。
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);
嗨,你能提供任何確切的鏈接到框架? – 2013-10-04 15:24:22
http://www.chilkatsoft.com/downloads_ios.asp – dirkoneill 2013-11-27 00:35:40
如何使用chilkat框架? – 2014-11-05 06:29:44