我正在尝试将Base64解码为大约200个Base64数据的十六进制,并且出现以下错误。它对其中的60个进行解码,然后停止。
ABHvPdSaxrhjAWA=
0011ef3dd49ac6b8630160
ABHPdSaxrhjAWA=
Traceback (most recent call last):
File "tt.py", line 36, in <module>
csvlines[0] = csvlines[0].decode("base64").encode("hex")
File "C:\Python27\lib\encodings\base64_codec.py", line 43, in base64_decode
output = base64.decodestring(input)
File "C:\Python27\lib\base64.py", line 325, in decodestring
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
Run Code Online (Sandbox Code Playgroud)
CSV的一些原始Base64来源
ABHPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdS4xriiAVQ=
ABDPdSqxrizAU4=
ABDPdSrxrjPAUo=
Run Code Online (Sandbox Code Playgroud)
CSV文件中至少有一个字符串,该字符串不是Base64字符串,损坏(损坏)的Base64字符串或者是缺少所需=填充的字符串。您的示例值ABHPdSaxrhjAWA=短一个= 或缺少另一个数据字符。
正确填充的Base64字符串的长度是4的倍数,因此您可以轻松地重新添加填充:
value = csvlines[0]
if len(value) % 4:
# not a multiple of 4, add padding:
value += '=' * (4 - len(value) % 4)
csvlines[0] = value.decode("base64").encode("hex")
Run Code Online (Sandbox Code Playgroud)
如果该值仍无法解码,则说明您的输入已损坏或无效的Base64开始。
对于示例错误,ABHPdSaxrhjAWA=上面添加了一个=使其可解码:
>>> value = 'ABHPdSaxrhjAWA='
>>> if len(value) % 4:
... # not a multiple of 4, add padding:
... value += '=' * (4 - len(value) % 4)
...
>>> value
'ABHPdSaxrhjAWA=='
>>> value.decode('base64')
'\x00\x11\xcfu&\xb1\xae\x18\xc0X'
>>> value.decode('base64').encode('hex')
'0011cf7526b1ae18c058'
Run Code Online (Sandbox Code Playgroud)
我需要强调的是,您的数据可能已经损坏。您的控制台输出包括一个有效的值,一个无效的值。有效的字符要长一个字符,这是唯一的区别:
ABHvPdSaxrhjAWA=
ABHPdSaxrhjAWA=
Run Code Online (Sandbox Code Playgroud)
注意v第4位;这是第二个示例中缺少的。这可能表明您的CSV数据发生了某些事情,导致该字符从第二个示例中删除。添加填充可以使第二个值再次可解码,但是结果将是错误的。我们无法在此告诉您这两个选项中的哪个。
| 归档时间: |
|
| 查看次数: |
15572 次 |
| 最近记录: |