zlib解压base64字符串报incorrect header check错误如何解决
错误原因
你遇到的incorrect header check报错核心原因是:示例2的data字段是多段独立的zlib压缩后的base64编码串,用分号拼接而成,原有代码直接对包含分号的完整字符串做base64解码,得到的二进制内容不符合zlib压缩数据的标准格式,因此解压失败。
修复方案
需要先将data按分号拆分得到独立的base64片段,再逐个完成解码、解压操作,最后根据需求拼接结果或者分别输出即可。
修复后的可运行代码
import zlib import base64 data = "Lki49VBk7tfhyXk3WyzwMBqP1u1UCxKWLJZ/yBFdgWafU8Glyu97OhkFQje2Ds+KllTVTgl5oPXc9U79JHBYz9XN344ZNTpv9CMg9BX5y4VeuPDzW7985b4Aa2TUHfGSKBYsSezbbctkSAaRZVdhJ2sjqdZH3pylcJwzAHr+Sn+Wtnib/sJDLqdLGUK3LSbPSK8Q0KQfDP5lNfavdvg8kepBPbN+Wr/oB3mtuhRjcFXe4y9BRWQTi4qGYDQ8MMlIeanrx7IaHfOvSGyBKa0TVbkixzmX2i93l6qqvKaTwoREGfdZA2jZdzzIVZWlXYU/qPkrLy873BJ0ZhXg9TE6XQ==;MZfPM47CRpWLrPw0TRDnvla4aDkJsmV5TALa0slA1TDaZj2SLOQ4dlQpy754tkFkkqLqXjNXT/u2P9vEYE2rW98vErmaevsxVhNEbcqP3UQ2bJJEzI/0oSx4KSeqe+mL+vqRbFW+Maw1vZKb1KLUzsxXq50HgxAqFbc/E/oN46DpgGceIpv0H04a0seVyKd51fZImahHi4Y7XAvgp9Jex/wAryh3sC91dMY94uwGTSlrDLbggNmTZXOKcK+GB8e7coNt5jAPbaj69XHGGSEreek8RDFZJXCqWWXsrgF248/1aVkPJoKm7yaFeZn8/A6MT5YZvH3Jc9SEnkUKEBCFAg==;0SbhqVJFrTaGsFUqPVdyag==;p+yK2V8sgj4tK0OYCHS/TMU9N6mIhrolBq5oIMjtOsjL2NTne3/6roEb9tgrrwB/34ye8yTHMx5LgrooV5AMsGhh1+cQt4qRen4kLGRzLzYin2jYyeAFQqkJKFS77PtVeGrHvGC/o/bQ6cWl6k395eXDBqlI2+DV6WG052QRtQTXYTcfsneu1fYWbIRvlBF19WmGHRkrVJAaPcEpBlh00g==" # 按分号拆分多段base64 base64_segments = data.split(';') output_list = [] for seg in base64_segments: # 跳过空片段 if not seg: continue # 单个片段base64解码 compressed_data = base64.b64decode(seg.encode()) # 解压,兼容不同压缩格式 try: decompressed = zlib.decompress(compressed_data).decode() output_list.append(decompressed) except zlib.error: # 适配无zlib头的raw压缩数据 decompressed = zlib.decompress(compressed_data, wbits=-zlib.MAX_WBITS).decode() output_list.append(decompressed) # 合并所有解压结果 output = ''.join(output_list) print(output)
补充说明
如果拆分后仍有个别片段解压报错,可以调整zlib.decompress的wbits参数适配不同压缩格式:
wbits=-zlib.MAX_WBITS:适配没有zlib头部的raw deflate压缩数据wbits=zlib.MAX_WBITS|32:自动识别zlib/gzip格式
内容的提问来源于stack exchange,提问作者Farrukh Shahzad Ahmed
相关产品推荐
相关产品推荐

