«Remplissage incorrect» peut signifier non seulement «remplissage manquant» mais aussi (croyez-le ou non) «remplissage incorrect».
Si les méthodes "d'ajout de remplissage" suggérées ne fonctionnent pas, essayez de supprimer quelques octets de fin:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Mise à jour: Tout tripotage autour de l'ajout de remplissage ou de la suppression des octets éventuellement incorrects de la fin doit être effectué APRÈS avoir supprimé les espaces, sinon les calculs de longueur seront perturbés.
Ce serait une bonne idée si vous nous montriez un (court) échantillon des données que vous devez récupérer. Modifiez votre question et copiez / collez le résultat de print repr(sample)
.
Mise à jour 2: il est possible que l'encodage ait été effectué de manière sécurisée pour les URL. Si tel est le cas, vous pourrez voir des caractères moins et des traits de soulignement dans vos données, et vous devriez pouvoir les décoder en utilisantbase64.b64decode(strg, '-_')
Si vous ne pouvez pas voir les caractères moins et les traits de soulignement dans vos données, mais que vous pouvez voir les caractères plus et les barres obliques, vous avez un autre problème et vous aurez peut-être besoin des astuces add-padding ou remove-cruft.
Si vous ne voyez aucun signe moins, trait de soulignement, plus et barre oblique dans vos données, vous devez déterminer les deux caractères alternatifs; ce seront ceux qui ne sont pas dans [A-Za-z0-9]. Ensuite, vous devrez expérimenter pour voir dans quel ordre ils doivent être utilisés dans le 2ème argument debase64.b64decode()
Mise à jour 3 : Si vos données sont "confidentielles de l'entreprise":
(a) vous devriez le dire dès le départ
(b) nous pouvons explorer d'autres voies pour comprendre le problème, qui est très probablement lié aux caractères utilisés à la place +
et /
dans l'alphabet de codage, ou par un autre formatage ou des caractères superflus.
Une de ces possibilités serait d'examiner quels caractères non "standard" sont dans vos données, par exemple
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, '-_')
? C'est a priori, sans que vous vous souciez de fournir des exemples de données, la solution Python la plus probable à votre problème. Les «méthodes» proposées étaient des suggestions DEBUG, NÉCESSAIREMENT «aléatoires» étant donné la rareté des informations fournies.