使用Python zlib的解压缩与JavaScript的zlib
问题描述:
在客户端,我用的是zlib.js库缩小一些字符串压缩串,那么我对其进行编码为base64,被发送到服务器:使用Python zlib的解压缩与JavaScript的zlib
var a = {"foo" : "bar"};
var deflate = new Zlib.Deflate(JSON.stringify(a));
var compressed = deflate.compress();
var sentToServer = btoa(String.fromCharCode.apply(null, compressed));
>>> "eJwVwwEJAAAAgKD/ry3B5QAdegQ0"
在服务器端我想用zlib for python27解压缩,但我得到了以下错误:
import base64, zlib
a = base64.b4decode("eJwVwwEJAAAAgKD/ry3B5QAdegQ0")
zlib.decompress(a)
>>>zlib.error: Error -3 while decompressing data: invalid distance too far back
什么是实现这一目标的正确方法?
答
zlib.js
的Deflate
接受Array.<number>
或Uint8Array
,你需要转换JSON来int数组:
var a = {"foo" : "bar"};
var s = JSON.stringify(a);
var data = new Array(s.length);
for (i = 0, il = s.length; i < il; ++i) {
data[i] = s.charCodeAt(i);
}
var deflate = new Zlib.Deflate(data);
这将产生:eJwFgEEJAAAIA7tcDNvow+/A77D7MCtRTB8fHXoENA==
总是downvotes,没有理由,耸肩... – georgexsh
对不起, 不是我... –