Gzip строка в JavaScript с использованием pako.js

Я прочитал тему о распаковке строки в JavaScript с использованием pako.js
Декомпрессия ZLIB - на стороне клиента
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);

Я хочу, чтобы метод для сжатия строки и выход может быть распакован с помощью приведенного выше кода
Как это сделать

3 ответа

Потратив 2 часа на поиск более 20 ответов на разных сайтах, я понял, как использовать gzip и base64. Это так просто:

      var your_input_string = "hello hello hello!";
var compressed_uint8array = pako.gzip(your_input_string);
var b64encoded_string = btoa(String.fromCharCode.apply(null, compressed_uint8array));
console.log(b64encoded_string);

Вам нужно включитьpako.js. Обратитесь к этому ответу, чтобы узнать, как его получить: Как использовать javascript pako.js? Пако не определен

  • Код для распаковки b64Data можно упростить:
return pako.inflate(atob(b64Data), { to: 'string' });
  • Код для сжатия до b64Data:
return btoa(pako.deflate(stringToCompress, { to: 'string' }));

Вы можете сделать следующее:

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"

Другие вопросы по тегам