簡體   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