繁体   English   中英

PHP的gzuncompress node.js中的function

[英]PHP's gzuncompress function in node.js

所以我得到了一些用 PHP 的 gzcompress 方法压缩的数据: http://us2.php.net/manual/en/function.gzcompress.php

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

我试过“compress”、“zlib”和其他几个节点压缩库,但似乎没有一个能识别数据。 例如,zlib 只是给我“错误:不正确的 header 检查”

答:原来“zlib”是通往 go 的方式。 我们遇到了来自 memcache 的二进制数据的另一个问题。 如果您在 node.js 缓冲区 object 中有二进制数据,并且您调用 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 中使用哪种压缩方法?

  • gzencode() 使用完全自包含的 gzip 格式,与 gzip 命令行工具相同
  • gzcompress() 使用原始 ZLIB 格式。 它与 gzencode 类似,但具有不同的 header 数据等。我认为它是用于流式传输的。
  • 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";

节点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM