所以我得到了一些用PHP的gzcompress方法压缩的数据:http://us2.php.net/manual/en/function.gzcompress.php
如何从node.js解码此数据?
我已经尝试过“ compress”,“ zlib”和其他几个节点压缩库,但是它们似乎都无法识别数据。例如,zlib只是给我“错误:错误的标题检查”
答案:事实证明,“ zlib”是可行的方法。我们还遇到了另一个问题,即内存缓存中的二进制数据。如果在node.js Buffer对象中有二进制数据,并且调用toString()而不是.toString('binary'),则它会发生各种混乱,因为东西被转义或解释了转义序列等等。不幸的是,我迄今尝试过的所有memcache插件都假定来自memcache的字符串数据,并且对如何正确处理它没有纪律。
我找到的最佳ZLIB模块:
https://github.com/kkaefer/node-zlib
// first run "npm install zlib", then...
var zlib = require('zlib');
var gz = zlib.deflate(new Buffer("Hello World", 'binary')); // also another 'Buffer'
console.log(zlib.inflate(gz).toString('binary'));
仅供参考,这个问题与关于Java的相关问题非常相似:PHP's gzuncompress function in Java?
从其他帖子中窃取(Which compression method to use in PHP?)
因此,“ zlib”将是正确的选择。这与gzip不交叉兼容。
php:
<?php
$data = 'HelloWorld';
$gzcompress = gzcompress($data);
$gzcompress_base64_encode = base64_encode($gzcompress);
echo "Compressing: {$data}\n";
echo $gzcompress."\n";
echo $gzcompress_base64_encode."\n";
echo "--- inverse ---\n";
echo gzuncompress(base64_decode($gzcompress_base64_encode))."\n";
nodejs:
const zlib = require('zlib');
var data = 'HelloWorld';
var z1 = zlib.deflateSync( Buffer.from(data));
var gzcompress = z1.toString();
var gzcompress_base64_encode = z1.toString('base64');
console.log('Compressing '+data);
console.log(gzcompress);
console.log(gzcompress_base64_encode);
console.log('--- inverse ---');
console.log(zlib.inflateSync(Buffer.from(gzcompress_base64_encode,'base64')).toString());