【发布时间】:2018-11-13 20:19:44
【问题描述】:
我能够使用 pako.js 在 JavaScript 中解压缩字符串
// Get some base64 encoded binary data from the server. Imagine we got this:
var b64Data = 'H4sIAAAAAAAAAwXB2w0AEBAEwFbWl2Y0IW4jQmziPNo3k6TuGK0Tj/ESVRs6yzkuHRnGIqPB92qzhg8yp62UMAAAAA==';
// Decode base64 (convert ascii to binary)
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function(x){return x.charCodeAt(0);});
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// Pako magic
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
var strData = String.fromCharCode.apply(null, new Uint16Array(data));
// Output to console
console.log(strData);
我想要一种压缩字符串的方法,输出可以通过上面的代码使用pako和gzip解压缩。
我该怎么做?
【问题讨论】:
-
如果您只是按照the docs 中所写的内容进行操作,出了什么问题?请注意,pako 具有压缩/解压缩到/从字符串的选项,因此您的类型化数组不是必需的。
-
@ASDFGerte 我在做 var str ="Hello world"; var test = pako.gzip(new Uint8Array(str), {to: 'string'});警报(btoa(测试));对于任何字符串,我都会得到相同的输出“H4sIAAAAAAAAAAwMAAAAAAAAAAAAA=”,并且在解压缩输出后也无法取回原始字符串。我哪里错了?
-
构建
Uint8Array的方式不起作用(始终为空)- 短时间调试测试会很快告诉您这一点。你可以解决这个问题,但更简单的方法是注意到在gzip(data[, options])中,数据的描述类型为“Uint8Array | Array | String”,这意味着你可以只做let test = pako.gzip(str, {to: 'string'});。还原过程就像pako.ungzip(test, { to: 'string' });一样简单。
标签: javascript gzip compression pako