PHP's gzuncompress function in node.js


PHP's gzuncompress function in node.js

所以我有一些数据被压缩与PHP的gzcompress方法:http://us2.php.net/manual/en/function.gzcompress.php

我如何从node.js解码这些数据??

我尝试了"compress","zlib"和其他几个节点压缩库,但它们似乎都不能识别数据。例如,zlib只是给我"错误:不正确的头检查"

答案:原来"zlib"是正确的方法。我们还有一个来自memcache的二进制数据问题。如果你在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在Java中的功能?

从另一篇文章中窃取(在PHP中使用哪种压缩方法?)

    gzencode()使用完全自包含的gzip格式,与gzip命令行工具相同。
  • gzcompress()使用原始的ZLIB格式。它类似于gzencode,但有不同的头数据等。我想它是用来流媒体的。
  • gzdeflate()自己使用原始DEFLATE算法,这是其他两种格式的基础。

因此,"zlib"是正确的选择。这与gzip不兼容。

试试https://github.com/kkaefer/node-zlib

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