2017-09-25 160 views
1

在客戶端,我用的是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 

什麼是實現這一目標的正確方法?

回答

1

zlib.jsDeflate接受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==

+0

總是downvotes,沒有理由,聳肩... – georgexsh

+0

對不起, 不是我... –