«Неправильное заполнение» может означать не только «отсутствующее заполнение», но и (верить или нет) «неправильное заполнение».
Если предложенные методы «добавления отступов» не работают, попробуйте удалить некоторые завершающие байты:
lens = len(strg)
lenx = lens - (lens % 4 if lens % 4 else 4)
try:
result = base64.decodestring(strg[:lenx])
except etc
Обновление: Любая возня с добавлением отступа или удалением, возможно, плохих байтов с конца должна выполняться ПОСЛЕ удаления любых пробелов, в противном случае вычисления длины будут нарушены.
Было бы неплохо, если бы вы показали (короткую) выборку данных, которые необходимо восстановить. Отредактируйте ваш вопрос и скопируйте / вставьте результат print repr(sample)
.
Обновление 2: возможно, кодирование выполнено в безопасном для URL-адресе порядке. Если это так, вы сможете увидеть символы минус и подчеркивание в ваших данных, и вы сможете декодировать их, используя base64.b64decode(strg, '-_')
Если вы не можете видеть символы минус и подчеркивание в ваших данных, но можете видеть символы плюс и косую черту, у вас есть другая проблема, и вам могут понадобиться трюки add-padding или remove-cruft.
Если вы не видите в данных ни минуса, ни подчеркивания, ни плюса, ни косой черты, вам нужно определить два альтернативных символа; они будут теми, которых нет в [A-Za-z0-9]. Затем вам нужно будет поэкспериментировать, чтобы увидеть, какой порядок их нужно использовать во 2-м аргументе base64.b64decode()
Обновление 3 : если ваши данные "конфиденциальны для компании":
(а) вы должны сказать это заранее
(б) мы можем исследовать другие пути понимания проблемы, которая, скорее всего, будет связана с тем, какие символы используются вместо +
и /
в алфавите кодирования, или с помощью других форматирующих или посторонних символов.
Один из таких способов - проверить, какие нестандартные символы содержатся в ваших данных, например,
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