在 Java 中压缩,在 Python 中解压缩?
Compress in Java, decompress in Python?
我正在尝试在我的 Android 应用程序 (Java) 中压缩一个字符串,然后使用 Python 在服务器上解压缩它。我尝试使用 Inflater class,但后来我在 python 一侧得到了 "error: Error -3 while decompressing data: incorrect header check"。在 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.....0000 000000000b0b0b0b0b0b 0b0b0b0b0b
我们尝试过的事情:
-- data_string = zlib.decompress(decrypted,-zlib.MAX_WBITS),给出了新的错误:"Error -3 while decompressing data: invalid stored block lengths"
-- data_string = zlib.decompressobj(解密,15+32) and data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS) 两者都给出初始错误 "invalid header check".
在解压中添加16+zlib.MAX_WBITS
或15 + 32
作为第二个[可选]wbits
参数:https://docs.python.org/2/library/zlib.html#zlib.decompress
data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS)
编辑:
根据您将压缩字节传递给 Python 的方式,您的问题可能与 Python 如何读取压缩字节有关。
我建议对 Java 中的压缩字节使用 Base64 编码,然后在 Python 中解码 base64,然后以这种方式解压缩这些字节...
Java:
String inputString = "blahblahblah";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();
System.out.println(Base64.getEncoder().encodeToString(output));
Python:
import base64
import zlib
base64_binary = b"eJxLyknMSIJiAB8CBMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
deflate_bytes=base64.decodebytes(base64_binary)
zlib.decompress(deflate_bytes)
# b'blahblahblah'
相关:
How can I decompress a gzip stream with zlib?
Python decompressing gzip chunk-by-chunk
Byte Array in Python
我正在尝试在我的 Android 应用程序 (Java) 中压缩一个字符串,然后使用 Python 在服务器上解压缩它。我尝试使用 Inflater class,但后来我在 python 一侧得到了 "error: Error -3 while decompressing data: incorrect header check"。在 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.....0000 000000000b0b0b0b0b0b 0b0b0b0b0b
我们尝试过的事情:
-- data_string = zlib.decompress(decrypted,-zlib.MAX_WBITS),给出了新的错误:"Error -3 while decompressing data: invalid stored block lengths"
-- data_string = zlib.decompressobj(解密,15+32) and data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS) 两者都给出初始错误 "invalid header check".
在解压中添加16+zlib.MAX_WBITS
或15 + 32
作为第二个[可选]wbits
参数:https://docs.python.org/2/library/zlib.html#zlib.decompress
data_string = zlib.decompress(compressed_string, 16+zlib.MAX_WBITS)
编辑: 根据您将压缩字节传递给 Python 的方式,您的问题可能与 Python 如何读取压缩字节有关。
我建议对 Java 中的压缩字节使用 Base64 编码,然后在 Python 中解码 base64,然后以这种方式解压缩这些字节...
Java:
String inputString = "blahblahblah";
byte[] input = inputString.getBytes("UTF-8");
// Compress the bytes
byte[] output = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();
System.out.println(Base64.getEncoder().encodeToString(output));
Python:
import base64
import zlib
base64_binary = b"eJxLyknMSIJiAB8CBMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
deflate_bytes=base64.decodebytes(base64_binary)
zlib.decompress(deflate_bytes)
# b'blahblahblah'
相关:
How can I decompress a gzip stream with zlib?
Python decompressing gzip chunk-by-chunk
Byte Array in Python