2016-09-25 475 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,我得到不正確頭檢查 –