ios json字符串解压问题

羊儿2014 2014-09-03 09:48:06
接收到服务器传给我的压缩后的字段是加密的 我先用GTMBase64解密后再解压,结果解不出来,截了一段数据,我贴下代码:
NSString *content = @"UEsDBBQACAAIAKV7IUUAAAAAAAAAAAAAAAABAAAAMKtWKkotLs0pUbIy0FFKSSxJVLKKjq0FAFBL\nBwiASTAgGAAAABYAAAA=";
NSData *datacontent = [GTMBase64 decodeString:content];
NSData *dataUncompresss = [LFCGzipUtillity uncompressZippedData:datacontent];

dataUncompresss得到null。泪奔~~~

datacontent = <504b0304 14000800 0800a57b 21450000 00000000 00000000 00000100 000030ab 562a4a2d 2ecd2951 b232d051 4a492c49 54b28a8e ad050050 4b070880 49302018 00000016 000000>
content对应解压出来的数据应该是{"result":0,"data":[]}
然后我又将{"result":0,"data":[]}本地压缩得到的是<1f8b0800 00000000 0003ab56 2a4a2d2e cd2951b2 32d0514a 492c4954 b28a8ead 05008049 30201600 0000>,和服务器给我的datacontent数据不一样有木有~~~


求大神支招啊~~
...全文
401 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2014-09-05
  • 打赏
  • 举报
回复
跟服务器端或是android端确认下整个数据处理流程吧。确定每一步该干嘛,解码解压这些应该是没有问题的,我觉得问题还是流程不匹配。 你5L提到的帖子里面的问题就是C/S流程不匹配导致的。
hslinux 2014-09-05
  • 打赏
  • 举报
回复
看样子像是先压缩,然后base64编码。 你需要先进行base64解码,然后解压。 建议你跟android开发方面或是服务器端的人一起调试下,一步步来,譬如说,先解码,看看跟android端解码后的数据是否一致。然后再看看解压的数据。
羊儿2014 2014-09-03
  • 打赏
  • 举报
回复
有人知道吗?
shlff 2014-09-03
  • 打赏
  • 举报
回复
了解了 谢谢楼主啦
羊儿2014 2014-09-03
  • 打赏
  • 举报
回复
贴下解压的算法: +(NSData *)uncompressZippedData:(NSData *)data { if ([data length] == 0) return data; unsigned full_length = [data length]; unsigned half_length = [data length] / 2; NSMutableData *decompressed = [NSMutableData dataWithLength: full_length + half_length]; BOOL done = NO; int status; z_stream strm; strm.next_in = (Bytef *)[data bytes]; strm.avail_in = [data length]; strm.total_out = 0; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; if (inflateInit2(&strm, (15+32)) != Z_OK) return nil; while (!done) { // Make sure we have enough room and reset the lengths. if (strm.total_out >= [decompressed length]) [decompressed increaseLengthBy: half_length]; strm.next_out = [decompressed mutableBytes] + strm.total_out; strm.avail_out = [decompressed length] - strm.total_out; // Inflate another chunk. status = inflate (&strm, Z_SYNC_FLUSH); if (status == Z_STREAM_END) done = YES; else if (status != Z_OK) break; } if (inflateEnd (&strm) != Z_OK) return nil; // Set real length. if (done) { [decompressed setLength: strm.total_out]; return [NSData dataWithData: decompressed]; } else return nil; }
羊儿2014 2014-09-03
  • 打赏
  • 举报
回复
我也不是很清楚这个 安卓客户端能解压,说是用的zip解压就可以了,我用的是gzip解压,zip不是压缩文件包么?网上找到的工具包貌似只有这个可以解压字符串啊,还有我看到另外一个贴子问题貌似和我一样http://bbs.csdn.net/topics/390618397
gxingmin 2014-09-03
  • 打赏
  • 举报
回复
那就是服务器压缩加密和客服端解密解压算法不匹配,你查看下两边用的lib是不是一样的
羊儿2014 2014-09-03
  • 打赏
  • 举报
回复
回复1楼:是的啊
羊儿2014 2014-09-03
  • 打赏
  • 举报
回复
5555555帖子不要沉啊~~求解救
gxingmin 2014-09-03
  • 打赏
  • 举报
回复
1、压缩-》加密 2、解密-》解压 是按这步骤来的吗?

29,041

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧