【问题标题】:Use zlib.js to decompress python zlib compress使用zlib.js解压 python zlib compress
【发布时间】:2017-11-01 15:03:47
【问题描述】:

在服务器端,我使用 python zlib 来压缩一个字符串,如下所示:

import zlib

s = '{"foo": "bar"}'
compress = zlib.compress(s)
print compress

前面代码的结果如下

xœ«VJËÏW²RPJJ,Rª

在客户端我使用zlib.js解压

var s = "xœ«VJËÏW²RPJJ,Rª"
var data = new Array(s.length);
for (i = 0, il = s.length; i < il; ++i) {
    data[i] = s.charCodeAt(i);
}
var inflate = new Zlib.Inflate(data);

我收到以下错误

zlib_and_gzip.min.js:1 Uncaught Error: invalid fcheck flag:28
    at new tb (zlib_and_gzip.min.js:48)
    at <anonymous>:1:15

我做错了什么?

【问题讨论】:

  • 再次检查您的编码?使用字符串可能会更改字节顺序或添加意外位?您可以考虑使用 base64 进行传输以减少此类错误。
  • 肯定是编码问题。字符串应该是var s = 'x\x9c\xabVJ\xcb\xcfW\xb2RPJJ,R\xaa\x05\x00 \x98\x04T'

标签: javascript python zlib


【解决方案1】:

问题在于编码。在python中我使用base64进行编码。

>>> import zlib

>>> s = '{"foo": "bar"}'
>>> compress = zlib.compress(s)
>>> print compress.encode('base64')

>>> "eJyrVkrLz1eyUlBKSixSqgUAIJgEVA=="

在客户端:

var s = atob("eJyrVkrLz1eyUlBKSixSqgUAIJgEVA==");

var data = new Array(s.length);
for (i = 0, il = s.length; i < il; ++i) {
    data[i] = s.charCodeAt(i);
}

var inflate = new Zlib.Inflate(data);
var decompress = inflate.decompress();
var plain = new TextDecoder("utf-8").decode(decompress);

plain 
'{"foo": "bar"}'

非常感谢您的帮助

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2010-11-21
    • 2017-04-06
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多