【问题标题】:python error in decoding base64 string解码base64字符串时出现python错误
【发布时间】:2016-09-25 13:43:51
【问题描述】:

我正在尝试解压缩 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 模块无法打开文件。

有什么想法吗?

【问题讨论】:

    标签: python base64 gzip


    【解决方案1】:

    这对我有用(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) 是一种更紧凑的解压缩字节字符串的方法。

    【讨论】:

    • 你刚刚成为我在互联网上最喜欢的人 :)
    • 优秀。正确的答案你能接受吗?
    • problem is that now the zlib function fails, where s = H4sIAAAAAAAAA81Q0U7CMBT9l/s8E2SEwd4wihIJITL1wfhwae9cQ9fOtoOQZf9uy0SF8AE+Nfec3nPPOQ1Yh2wD6VsDlhkitcCSIIWiXkMEFRosLaQNVCwrDNlCSw6pqqWMwJLZCkYzD8AQ2ggcmg9yfnq8ffDrbXSm6bYnksJmLzdSsw0FhebP2MK5ehR8uiDCKReK+FIoD66990wvCM1cbAObo7TkCS5sJXE/U7n2DxlID8ypyamP0RmE9t2LdceflRPymLGqDSvQ0s0lTqh7g4wyEdJ1GKuNIeXk/hUdK4ivzlJ88+HyqrucXiqpNnL5P3v6ibAia4VWYfOQoTwCwcgnllf8ep3kvT4f5jgYYC8ejeL+OIkZJf0kHq9HcahDK+e1sn0VTM1ni7vJ0y98kArfhJ2idVNtdmj4REq9C1U4U1PbfgEKKymWwgIAAA==.QbqL60VQGqBsezVFYSdOKv5ZoX+/68tSu7RSQwmpPcY, i get incorrect header check
    • s 直到== 都没有问题,并且使用 gzip 可以很好地解码。 == 后面的 .Qbq... 是什么?
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2019-06-15
    • 2020-12-26
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多