<p>我同意这是一个数据损坏问题<code>zlib</code>和<code>pako</code>应该能够读取彼此的数据,而无需删除任何字段或添加幻数</p>
<p>为了证明这一点,我收集了两个演示脚本,一个使用<code>pako</code>压缩数据,另一个使用<code>zlib</code>再次压缩数据:</p>
<pre class="lang-js prettyprint-override"><code>// deflate.js
var pako = require("./pako.js");
console.log(escape(pako.deflate(process.argv[2], {to: "string"})));
</code></pre>
<pre class="lang-py prettyprint-override"><code># inflate.py
import urllib.parse, zlib, sys
print(zlib.decompress(urllib.parse.unquote_to_bytes(sys.stdin.read())).decode("utf-8"))
</code></pre>
<p>使用<code>node deflate.js "Here is some example text" | inflate.py</code>在命令行上运行它们。预期的输出是传递给<code>node deflate.js</code>的参数</p>
<p>关于<code>pako</code>值得指出的一点是使用<code>to: "string"</code>选项时的行为。此选项的<a href="http://nodeca.github.io/pako/#deflate" rel="nofollow noreferrer">documentation</a>如下所示:</p>
<blockquote>
<p><code>to</code> (String) - if equal to 'string', then result will be "binary string" (each char code [0..255])</p>
</blockquote>
<p>正是出于这个原因,我在上面的JavaScript函数中使用了<code>escape</code>。使用<code>escape</code>可以确保JavaScript和Python之间传递的字符串不包含任何非ASCII字符。(请注意,<code>encodeURIComponent</code>不<em>工作,因为字符串包含二进制数据。)然后我在Python中使用<code>urllib.parse.unquote_to_bytes</code>来撤消此转义</p>
<p>如果您可以在浏览器中<code>escape</code>压缩<code>pako</code>的数据,那么您可能会将其传递给Python以再次对其进行膨胀</p>