node.js中PHP的gzuncompress函数

问题描述 投票:1回答:2

所以我得到了一些用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?

php node.js gzip zlib
2个回答
2
投票

从其他帖子中窃取(Which compression method to use in PHP?

  • gzencode()使用完全独立的gzip格式,与gzip命令行工具相同
  • gzcompress()使用原始ZLIB格式。它与gzencode相似,但是具有不同的标头数据等。我认为它打算用于流式处理。
  • gzdeflate()独自使用原始的DEFLATE算法,这是其他两种格式的基础。

因此,“ zlib”将是正确的选择。这与gzip不交叉兼容。

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


0
投票

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());
© www.soinside.com 2019 - 2024. All rights reserved.