擅长:python、mysql、java
<p>如果字符串先是base64 ed,然后是zipped,那么解码应该是相反的方式!</p>
<p>示例和输出字符串不匹配</p>
<pre><code>In [1]: t = '{"xp": 656398, "rank": 34}'
In [2]: t.encode('base64')
Out[2]: 'eyJ4cCI6IDY1NjM5OCwgInJhbmsiOiAzNH0=\n'
In [3]: t.encode('zlib').encode('base64')
Out[3]: 'eJyrVqooULJSMDM1M7a00FFQKkrMywbyjU1qAVupBsE=\n'
In [4]: t.encode('base64').encode('zlib')
Out[4]: 'x\x9cK\xad\xf42Iv\xf64\xf3t\x894\xf4\xcb\xf25\xf5w.O\xf7\xcc\xf3\xcaH\xca-\xce\xf4\xcft\xac\xf2\xf30\xb0\xe5\x02\x00\xe3E\x0b\xd7'
</code></pre>
<p>给定的输入字符串{“xp”:656398,“rank”:34}不会产生示例输出(参见Out[3]和Out[4])。</p>
<p>您还应该注意,在这种情况下,<code>base64</code>编码的字符串比原始字符串长<em>并且附加的<code>zlib</code>编码最长。压缩这么短的字符串通常不值得开销。</p>
<p>如果我们以你的例子输出并处理它,这就是我们得到的</p>
<pre><code>In [5]: s = 'eNrj4mZkrShgWdHBx1mUmJfNosQIACUhBCI='
In [6]: s.decode('base64')
Out[6]: 'x\xda\xe3\xe2fd\xad(`Y\xd1\xc1\xc7Y\x94\x98\x97\xcd\xa2\xc4\x08\x00%!\x04"'
In [7]: s.decode('base64').decode('zlib')
Out[7]: '\n\x0b\x01\x05xp\x04\xa8\x88\x0e\trank\x04"\x01'
</code></pre>
<p>在输出中可以清楚地看到文本“xp”和“rank”。结尾处的“'”可以解释为整数34。</p>
<p>在对数据进行编码和压缩之前,actionscript似乎会对数据进行一些处理。</p>