在 JavaScript 中解压缩 Gzip 缓冲区
Uncompressing Gzip buffer in JavaScript
我有一个由 php 函数 gzcompress 压缩的数据缓冲区,我需要在 js (nodejs) 中解压它。
gzcompress(serialize($slot[$i]['advanced_details']),8)
我试过 Class:zlib.Gunzip 来自 https://nodejs.org/api/zlib.html#zlib_class_zlib_gunzip
但它抛出:
{ [Error: incorrect header check] errno: -3, code: 'Z_DATA_ERROR' }
满缓冲区here
我的代码:
nodeZlib.gunzip(rows[0]['Slot'+(i+1)+'AdvancedDetails'], 8, function(error, data) {
if(!error) {
console.log = data.toString();
} else {
console.log('Error unzipping:');
console.log(error);
}
});
我做错了什么?
您混淆了格式。 PHP 中可怕的函数命名助长了你的困惑。 PHP 的 gzcompress()
生成 zlib 格式,而 node.js 的 gunzip
需要 gzip 格式。您可以在 PHP 中使用 gzencode()
来生成 gzip 格式,或者您可以使用 node.js 的 zlib.inflate
来解压缩 zlib 格式。
我试图缩小 json 命令的 shell 输出。太长了没有编码。
我得出的解决方案:
$content = ['sample', 'data'];
$data = base64_encode(gzencode(
json_encode($content, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE),
8,
FORCE_DEFLATE
));
// then send $data to node
并在节点中检索数据:
const zlib = require('zlib');
let data = zlib.inflateSync(new Buffer(data.min, 'base64')).toString();
我有一个由 php 函数 gzcompress 压缩的数据缓冲区,我需要在 js (nodejs) 中解压它。
gzcompress(serialize($slot[$i]['advanced_details']),8)
我试过 Class:zlib.Gunzip 来自 https://nodejs.org/api/zlib.html#zlib_class_zlib_gunzip
但它抛出:
{ [Error: incorrect header check] errno: -3, code: 'Z_DATA_ERROR' }
满缓冲区here
我的代码:
nodeZlib.gunzip(rows[0]['Slot'+(i+1)+'AdvancedDetails'], 8, function(error, data) {
if(!error) {
console.log = data.toString();
} else {
console.log('Error unzipping:');
console.log(error);
}
});
我做错了什么?
您混淆了格式。 PHP 中可怕的函数命名助长了你的困惑。 PHP 的 gzcompress()
生成 zlib 格式,而 node.js 的 gunzip
需要 gzip 格式。您可以在 PHP 中使用 gzencode()
来生成 gzip 格式,或者您可以使用 node.js 的 zlib.inflate
来解压缩 zlib 格式。
我试图缩小 json 命令的 shell 输出。太长了没有编码。
我得出的解决方案:
$content = ['sample', 'data'];
$data = base64_encode(gzencode(
json_encode($content, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE),
8,
FORCE_DEFLATE
));
// then send $data to node
并在节点中检索数据:
const zlib = require('zlib');
let data = zlib.inflateSync(new Buffer(data.min, 'base64')).toString();