2017-08-25 1 views
1

Ich versuche, base64 String Bild von Python-Code zu konvertieren, aber ich bin immer binascii.Error: Falsche Polsterung Ich habe mit meinem solution durchgegangen aber sie schlagen nur vor, dass die Länge der Prüfzeichenfolge teilbar 4 ist, wenn sie nicht durch 4 teilbar gemacht werden soll, indem am Ende des base64-kodierten Zeichens '=' Zeichen hinzugefügt werden. Bitte helfen Sie dabei.binascii.Error: Falsche Polsterung, auch wenn String-Länge ist Vielfaches von 4

PYTHON CODE: (bitte überprüfen Code aus dem Laufwerk für mehr Sichtbarkeit)

import base64 

strOne= 'data:image/png;base64,iVBORw0KGgoAAAANSU...string has 200000 character thats why I couldn t paste' 
print 'strOne Length',len(strOne) 
print 'StrOne Length is completely divisible by 4 (len%4),(len/4):', len(strOne)%4,len(strOne)/4 

with open("imageToSave.png", "wb") as fh: 
    fh.write(strOne.strip().decode('base64')) 

Ausgang:

strOne Length 200000 
StrOne Length is completely divisible by 4 (len%4),(len/4): 0 50000 
Traceback (most recent call last): 
    File "/tests.py", line 13, in <module> 
    fh.write(strOne.strip().decode('base64')) 
    File "/usr/lib/python2.7/encodings/base64_codec.py", line 42, in base64_decode 
    output = base64.decodestring(input) 
    File "/usr/lib/python2.7/base64.py", line 328, in decodestring 
    return binascii.a2b_base64(s) 
binascii.Error: Incorrect padding 

Antwort

2

durch Ihren Link Überprüfung der Zeichenfolge hat 200000 Bytes alles in Ordnung, aber es enthält die Überschrift:

strOne = b"data:image/png;base64,iVBORw0KGgoAAAANSU... 

Dies ist ein Teil der MIME-Nachricht oder etwas. Sie müssen das zuerst abziehen.

strOne = strOne.partition(",")[2] 

dann Pad (falls erforderlich)

pad = len(strOne)%4 
strOne += b"="*pad 

dann dekodieren mit codecs (Python 3-konform)

codecs.decode(strOne.strip(),'base64') 

=> "wir in Teamarbeit glauben" :)

+1

Danke @ Jean-François Fabre –

+0

Das hat wunderbar funktioniert! – varagrawal

Verwandte Themen