Я согласен, что это проблема повреждения данных. zlib
и pako
должны иметь возможность считывать данные друг друга без вычеркивания полей или добавления магических c чисел.
Чтобы доказать это, вот пара демонстрационных сценариев, которые я создал вместе, один используя pako
для дефлятирования данных и один используя zlib
для его инфляции:
// deflate.js
var pako = require("./pako.js");
console.log(escape(pako.deflate(process.argv[2], {to: "string"})));
# inflate.py
import urllib.parse, zlib, sys
print(zlib.decompress(urllib.parse.unquote_to_bytes(sys.stdin.read())).decode("utf-8"))
Запустите их в командной строке, используя node deflate.js "Here is some example text" | inflate.py
. Ожидаемый результат - это аргумент, передаваемый node deflate.js
.
Одна вещь, на которую стоит обратить внимание в pako
, - это поведение при использовании опции to: "string"
. Документация для этой опции выглядит следующим образом:
to
(String) - если равно 'string', то результатом будет "двоичная строка" (каждый код символа) [0..255])
Именно по этой причине я использую escape
в функции JavaScript выше. Использование escape
гарантирует, что строка, переданная между JavaScript и Python, не содержит никаких символов, не входящих в ASCII. (Обратите внимание, что encodeURIComponent
не работает, потому что строка содержит двоичные данные.) Затем я использую urllib.parse.unquote_to_bytes
в Python, чтобы отменить это экранирование.
Если вы можете escape
pako
-детализированные данные в браузере, вы можете передать их в Python, чтобы снова их раздувать.