2016-09-25 245 views
1

我想解压一个base64字符串,蟒蛇错误

这是我使用

def unzip_string(s) : 
    s1 = base64.decodestring(urllib.unquote(s)) 
    sio = StringIO.StringIO(s1) 
    gzf = gzip.GzipFile(fileobj=sio) 
    guff = gzf.read() 
    return json.loads(guff) 

我收到提示错误代码:不正确的填充

其中我尝试使用node.js代码解压缩相同的字符串,但没有任何问题。

其中:

s == H4sIAAAAAAAAA22PW0/CQBCF/8s81wQosdA3TESJhhhb9cHwMN1O6Ybtbt0LhDT97+5yU4yPc+bMnO90YCyyDaSfHRimieQSG4IUaldABC1qbAykHbQsrzWZWokSUumEiMCQ3nJGCy9ADH0EFvWarJ+eHv11v4qgEIptqHyTlovzWes0q9HQ3X87Lh80Msp5gDhqzGlN0or9B1pWU5ldxV72c2/ODg0C7lUXu/U2p8XLpY35+6Mmtsn4WqLILFrnTRUKQxFwk7+fSL23+zX215VD/jE16CeojIzhSi5kpQ6xzVkIz76wuSmHRVINRuVtheMxDuLJJB5Nk5hRMkriaTGJh8MDn5LWv8v3bejzvFjez15/5EsNbuZo7FzpHepyJoTaBWqrHfX9N0/UAJ7qAQAA.bi0I1YDZ3V6AXu6aYTGO1JWi5tE5CoZli7aa6bFtqM4 

我已经看到了一些建议加上“=”等神奇功效,但它只是导致gzip的模块无法打开的文件中。

有什么想法?

回答

0

这对我有用(Python 3)。填充的确很重要,因为你已经在其他的答案看出:

import base64 
import zlib 
import json 

s = b'H4sIAAAAAAAAA22PW0/CQBCF/8s81wQosdA3TESJhhhb9cHwMN1O6Ybtbt0LhDT97+5yU4yPc+bMnO90YCyyDaSfHRimieQSG4IUaldABC1qbAykHbQsrzWZWokSUumEiMCQ3nJGCy9ADH0EFvWarJ+eHv11v4qgEIptqHyTlovzWes0q9HQ3X87Lh80Msp5gDhqzGlN0or9B1pWU5ldxV72c2/ODg0C7lUXu/U2p8XLpY35+6Mmtsn4WqLILFrnTRUKQxFwk7+fSL23+zX215VD/jE16CeojIzhSi5kpQ6xzVkIz76wuSmHRVINRuVtheMxDuLJJB5Nk5hRMkriaTGJh8MDn5LWv8v3bejzvFjez15/5EsNbuZo7FzpHepyJoTaBWqrHfX9N0/UAJ7qAQAA.bi0I1YDZ3V6AXu6aYTGO1JWi5tE5CoZli7aa6bFtqM4' 

decoded = base64.urlsafe_b64decode(s + b'=') 
uncompressed = zlib.decompress(decoded, 16 + zlib.MAX_WBITS) 
unjsoned = json.loads(uncompressed.decode('utf-8')) 

print(unjsoned) 

zlib.decompress(decoded, 16 + zlib.MAX_WBITS)是一个更为简洁的方式来未gzip的一个字节的字符串。

+0

你刚刚成为我最喜欢的人在互联网:) –

+0

优秀。如果对的话你可以接受答案吗? – bbayles

+0

问题是,现在的zlib的函数失败,其中s = H4sIAAAAAAAAA81Q0U7CMBT9l/s8E2SEwd4wihIJITL1wfhwae9cQ9fOtoOQZf9uy0SF8AE + Nfec3nPPOQ1Yh2wD6VsDlhkitcCSIIWiXkMEFRosLaQNVCwrDNlCSw6pqqWMwJLZCkYzD8AQ2ggcmg9yfnq8ffDrbXSm6bYnksJmLzdSsw0FhebP2MK5ehR8uiDCKReK + FIoD66990wvCM1cbAObo7TkCS5sJXE/U7n2DxlID8ypyamP0RmE9t2LdceflRPymLGqDSvQ0s0lTqh7g4wyEdJ1GKuNIeXk/hUdK4ivzlJ88 + HyqrucXiqpNnL5P3v6ibAia4VWYfOQoTwCwcgnllf8ep3kvT4f5jgYYC8ejeL + OIkZJf0kHq9HcahDK + e1sn0VTM1ni7vJ0y98kArfhJ2idVNtdmj4REq9C1U4U1PbfgEKKymWwgIAAA ==。QbqL60VQGqBsezVFYSdOKv5ZoX +/68tSu7RSQwmpPcY,我得到不正确头检查 –