Ste*_*ott 8 iphone gzip objective-c http-compression deflate
我有一个在Windows Azure上运行的Web服务,它返回我在iPhone应用程序中使用的JSON.
不幸的是,Windows Azure似乎还不支持动态响应的压缩(长篇故事)所以我决定通过返回一个未压缩的JSON包来解决它,它包含一个压缩的(使用GZIP)字符串.
例如
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
Run Code Online (Sandbox Code Playgroud)
...其中value是以JSON表示的复杂对象的压缩字符串.
这在服务器上很容易实现,但是对于我的生活,我无法弄清楚如何将压缩的NSString解压缩为未压缩的NSString,我可以为zlib等找到的所有示例都处理文件等.
谁能给我任何关于如何做到这一点的线索?(我也很乐意使用deflate的解决方案,因为我可以更改服务器端实现以使用deflate).
谢谢!!
史蒂芬
编辑1: Aaah,我看到ASIHTTPRequest在它的源代码中使用了以下函数:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
Run Code Online (Sandbox Code Playgroud)
...而且我知道我可以将NSString转换为NSData,所以我会看到这是否会引导我到任何地方!
编辑2:不幸的是,编辑1中描述的方法并没有引导我到任何地方.
编辑3:按照下面关于base64编码/解码的建议,我想出了以下代码.您可以猜测编码的GzippedString是一个字符串"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);
Run Code Online (Sandbox Code Playgroud)
经过这么长时间,我终于找到了解决这个问题的方法!
上面的答案都没有帮助我,尽管它们看起来都很有希望。最后,我能够使用 .net 的 chilkat 框架通过 gzip 压缩服务器上的字符串...然后使用 iOS 的 chilkat 框架在 iphone 上解压缩(尚未发布,但如果您通过电子邮件发送直接家伙)。
chilkat 框架使这一切变得超级容易,所以对开发人员竖起大拇指!