"Falsche Polsterung" kann nicht nur "fehlende Polsterung" bedeuten, sondern auch (ob Sie es glauben oder nicht) "falsche Polsterung".
Wenn die vorgeschlagenen Methoden zum Hinzufügen von Auffüllungen nicht funktionieren, entfernen Sie einige nachfolgende Bytes:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Update: Jegliches Herumspielen am Auffüllen oder Entfernen möglicherweise fehlerhafter Bytes am Ende sollte NACH dem Entfernen von Leerzeichen erfolgen, da sonst die Längenberechnungen gestört werden.
Es wäre eine gute Idee, wenn Sie uns eine (kurze) Stichprobe der Daten zeigen würden, die Sie wiederherstellen müssen. Bearbeiten Sie Ihre Frage und kopieren Sie das Ergebnis von print repr(sample) .
Update 2: Möglicherweise wurde die Codierung auf URL-sichere Weise durchgeführt. In diesem Fall können Sie Minus- und Unterstrichzeichen in Ihren Daten sehen und diese mit dekodierenbase64.b64decode(strg, '-_')
Wenn Sie in Ihren Daten keine Minus- und Unterstrichzeichen sehen können, aber Plus- und Schrägstriche sehen können, haben Sie ein anderes Problem und benötigen möglicherweise die Tricks zum Hinzufügen oder Auffüllen von Cruft.
Wenn Sie in Ihren Daten kein Minus, keinen Unterstrich, kein Plus und keinen Schrägstrich sehen können, müssen Sie die beiden alternativen Zeichen bestimmen. Sie sind diejenigen, die nicht in [A-Za-z0-9] enthalten sind. Dann müssen Sie experimentieren, um zu sehen, in welcher Reihenfolge sie im 2. Argument von verwendet werden müssenbase64.b64decode()
Update 3 : Wenn Ihre Daten "vertraulich" sind:
(a) Sie sollten dies im Voraus sagen.
(B) Wir können andere Wege zum Verständnis des Problems untersuchen, die höchstwahrscheinlich damit zusammenhängen, welche Zeichen anstelle von +und /in verwendet werden das Kodierungsalphabet oder durch andere Formatierungen oder fremde Zeichen.
Eine solche Möglichkeit wäre, zu untersuchen, welche nicht "Standard" -Zeichen in Ihren Daten enthalten sind, z
from collections import defaultdict
d = defaultdict(int)
import string
s = set(string.ascii_letters + string.digits)
for c in your_data:
if c not in s:
d[c] += 1
print d
base64.b64decode(strg, '-_')? Dies ist a priori, ohne dass Sie sich die Mühe machen, Beispieldaten bereitzustellen, die wahrscheinlichste Python-Lösung für Ihr Problem. Die vorgeschlagenen "Methoden" waren DEBUG-Vorschläge, die angesichts des Mangels an gelieferten Informationen unbedingt "Hit and Miss" waren.