Функция PHP gzuncompress в node.js - PullRequest
1 голос
/ 12 августа 2011

Итак, у меня есть некоторые данные, которые были сжаты с помощью метода PHP gzcompress: http://us2.php.net/manual/en/function.gzcompress.php

Как я могу декодировать эти данные из node.js ??

Я пробовал "compress", "zlib" и несколько других библиотек сжатия узлов, но ни одна из них, похоже, не распознает данные. Например, zlib просто выдает мне «Ошибка: неверная проверка заголовка»

Ответ: Оказывается, "zlib" - это путь. У нас была дополнительная проблема с двоичными данными из memcache. Если у вас есть двоичные данные в объекте Buffer для node.js и вы вызываете 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 gzuncompress в Java?

1 Ответ

2 голосов
/ 12 августа 2011

Кража из другого поста ( Какой метод сжатия использовать в PHP? )

  • gzencode () использует полностью автономный формат gzip, такой же, как командная строка gzipУтилита
  • gzcompress () использует необработанный формат ZLIB.Он похож на gzencode, но имеет другие данные заголовков и т. Д. Я думаю, что он был предназначен для потоковой передачи.
  • gzdeflate () использует алгоритм DEFLATE самостоятельно, который является основой для обоих других форматов.

Таким образом, "zlib" будет правильным выбором.Это НЕ совместимо с gzip.

Попробуйте https://github.com/kkaefer/node-zlib

...