【发布时间】:2016-10-25 18:23:26
【问题描述】:
我正在尝试在我的 Android 应用程序 (Java) 中压缩一个字符串,然后在服务器上使用 Python 解压缩它。我尝试使用 Inflater 类,但随后在 python 端出现“错误:解压缩数据时错误 -3:不正确的标头检查”。在python方面,我是使用zlib来解压的:
data_string = zlib.decompress(compressed_string)
在Android端,我们使用Deflater进行压缩:
String stringData = commentData == null ? sleepData.toString() : sleepData.toString() + commentData.toString();
byte[] bytes = stringData.getBytes("UTF-8");
int length = bytes.length;
Deflater deflater = new Deflater();
deflater.setInput(bytes);
deflater.finish();
byte[] compressedBytes = new byte[length];
deflater.deflate(compressedBytes);
deflater.end();
如何在 python 中解压应用发送的字符串?
谢谢!
编辑: 这是我们从 Android 发送并输入解压缩命令的内容:(点代表更多相同的内容 - 有很多零,最后是一些“0b”:“78efbfbdefbfbdefbfbdefbfbd6e1b2....efbfbd190000000. ....0000000000000b0b0b0b0b0b0b0b0b0b0b
我们尝试过的事情:
-- data_string = zlib.decompress(decrypted,-zlib.MAX_WBITS),它给出了一个新的错误:“Error -3 while decompressing data: invalid stored block lengths”
-- data_string = zlib.decompressobj(decrypted,15+32) 和 data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS) 都给出初始错误“无效的标头检查”。
【问题讨论】:
-
如何将数据从 Android/Java 端发送到 Server/Python 端?
-
应该可以,因为
Deflater默认生成 zlib 格式,而zlib.decompress()默认需要 zlib 格式。您能否以十六进制提供您要提供给zlib.decompress()的内容的前几个字节? -
这就是字符串的样子:(点表示更多相同 - 有很多零,最后是一些“0b”:“78efbfbdefbfbdefbfbdefbfbd6e1b2....efbfbd190000000. ....0000000000000b0b0b0b0b0b0b0b0b0b0b"
-
关于数据的发送——我们先压缩,然后在Android端用AES256加密,然后发送到服务器,在那里我们解密,然后尝试解压。在我们添加压缩之前,加密/解密部分工作正常。
标签: java android python zlib compression