"Preenchimento incorreto" pode significar não apenas "preenchimento ausente", mas também (acredite ou não) "preenchimento incorreto".
Se os métodos de "adição de preenchimento" sugeridos não funcionarem, tente remover alguns bytes finais:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Atualização: Qualquer tentativa de adicionar preenchimento ou remover bytes possivelmente danificados do final deve ser feito APÓS a remoção de qualquer espaço em branco, caso contrário, os cálculos de comprimento serão alterados.
Seria uma boa ideia se você nos mostrasse uma amostra (curta) dos dados que você precisa recuperar. Edite sua pergunta e copie / cole o resultado de print repr(sample)
.
Atualização 2: é possível que a codificação tenha sido feita de maneira segura para url. Se for esse o caso, você será capaz de ver os caracteres de subtração e sublinhado em seus dados e deverá ser capaz de decodificá-los usandobase64.b64decode(strg, '-_')
Se você não consegue ver os caracteres de subtração e sublinhado em seus dados, mas consegue ver os caracteres de mais e barra, então você tem outro problema e pode precisar dos truques de adicionar preenchimento ou remover cruft.
Se você não consegue ver nenhum de menos, sublinhado, mais e barra em seus dados, então você precisa determinar os dois caracteres alternativos; eles serão aqueles que não estão em [A-Za-z0-9]. Então você precisará experimentar para ver em qual ordem eles precisam ser usados no segundo argumento debase64.b64decode()
Atualização 3 : Se seus dados são "confidenciais da empresa":
(a) você deve dizer isso antecipadamente
(b) podemos explorar outros caminhos para a compreensão do problema, que é altamente provável que esteja relacionado a quais caracteres são usados em vez de +
e /
em o alfabeto de codificação, ou por outra formatação ou caracteres estranhos.
Uma dessas vias seria examinar quais caracteres não "padrão" estão em seus dados, por exemplo
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, '-_')
? Isso é a priori, sem você se preocupar em fornecer nenhum dado de amostra, a solução Python mais provável para o seu problema. Os “métodos” propostos foram sugestões de DEBUG, NECESSARIAMENTE “acertos e erros” dada a escassez de informações fornecidas.