【问题标题】:Gzip string in javascript using pako.js使用 pako.js 的 javascript 中的 Gzip 字符串
【发布时间】:2015-11-11 03:38:11
【问题描述】:

我读了一篇关于使用 pako.js 在 javascript 中解压缩字符串的主题
ZLIB Decompression - Client Side
http://jsfiddle.net/9yH7M/1/
这是解压代码

// 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);

我想要一个压缩字符串的方法,输出可以通过上面的代码解压
怎么会这样

【问题讨论】:

标签: javascript jquery compression gzip


【解决方案1】:
  • b64Data解压的代码可以简化:
return pako.inflate(atob(b64Data), { to: 'string' });
  • 要压缩到b64Data的代码:
return btoa(pako.deflate(stringToCompress, { to: 'string' }));

【讨论】:

  • 不适用于 gzip 部分,gzip 提供 uint8array
【解决方案2】:

您可以执行以下操作:

var binData = pako.deflate( "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")
.map(function(x){return x.charCodeAt(0);}));

产量:

binData : Uint8Array(37) [120, 156, 115, 116, 114, 118, 113, 117, 115, 247, 240, 244, 242, 246, 241, 245, 243, 15, 8, 12, 10、14、9、13、11、143、136、140、114、196、41、3、0、150、1、15、191]

var strData = String.fromCharCode.apply(null, pako.inflate(String.fromCharCode.apply(null, binData).split("").  map(function(x){return x.charCodeAt(0);})));

//yields back 

"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
猜你喜欢
  • 2018-11-13
  • 2023-01-25
  • 2021-11-09
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
相关资源
最近更新 更多