接收到服务器传给我的压缩后的字段是加密的 我先用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数据不一样有木有~~~
求大神支招啊~~

解决方案 »

  1.   

    那就是服务器压缩加密和客服端解密解压算法不匹配,你查看下两边用的lib是不是一样的
      

  2.   

    我也不是很清楚这个 安卓客户端能解压,说是用的zip解压就可以了,我用的是gzip解压,zip不是压缩文件包么?网上找到的工具包貌似只有这个可以解压字符串啊,还有我看到另外一个贴子问题貌似和我一样http://bbs.csdn.net/topics/390618397
      

  3.   

    贴下解压的算法:
    +(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;
    }
      

  4.   

    看样子像是先压缩,然后base64编码。
    你需要先进行base64解码,然后解压。建议你跟android开发方面或是服务器端的人一起调试下,一步步来,譬如说,先解码,看看跟android端解码后的数据是否一致。然后再看看解压的数据。
      

  5.   

    跟服务器端或是android端确认下整个数据处理流程吧。确定每一步该干嘛,解码解压这些应该是没有问题的,我觉得问题还是流程不匹配。你5L提到的帖子里面的问题就是C/S流程不匹配导致的。