"Relleno incorrecto" puede significar no sólo "relleno faltante" sino también (lo crea o no) "relleno incorrecto".
Si los métodos sugeridos de "agregar relleno" no funcionan, intente eliminar algunos bytes finales:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Actualización: Cualquier manipulación para agregar relleno o eliminar posibles bytes incorrectos del final debe hacerse DESPUÉS de eliminar cualquier espacio en blanco, de lo contrario, los cálculos de longitud se alterarán.
Sería una buena idea que nos mostrara una muestra (breve) de los datos que necesita recuperar. Edite su pregunta y copie / pegue el resultado de print repr(sample)
.
Actualización 2: Es posible que la codificación se haya realizado de manera segura para URL. Si este es el caso, podrá ver los caracteres menos y subrayados en sus datos, y debería poder decodificarlos usandobase64.b64decode(strg, '-_')
Si no puede ver los caracteres de menos y subrayado en sus datos, pero puede ver los caracteres de más y barra, entonces tiene algún otro problema y puede necesitar los trucos de agregar relleno o eliminar cruft.
Si no ve nada de menos, subrayado, más ni barra en sus datos, entonces necesita determinar los dos caracteres alternativos; serán los que no estén en [A-Za-z0-9]. Luego, deberá experimentar para ver qué orden deben usarse en el segundo argumento debase64.b64decode()
Actualización 3 : si sus datos son "confidenciales de la empresa":
(a) debe decirlo desde el principio
(b) podemos explorar otras vías para comprender el problema, que es muy probable que esté relacionado con los caracteres que se utilizan en lugar de +
y /
en el alfabeto de codificación, o por otro formato o caracteres extraños.
Una de esas vías sería examinar qué caracteres no "estándar" hay en sus datos, p. Ej.
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, '-_')
? Eso es a priori, sin que se moleste en proporcionar ningún dato de muestra, la solución Python más probable para su problema. Los "métodos" propuestos fueron sugerencias DEBUG, NECESARIAMENTE "acertadas" dada la escasez de información suministrada.