"Неправильне прокладка" може означати не тільки "відсутність прокладки", але й (вірити чи ні) "неправильне набивання".
Якщо запропоновані методи "додавання прокладок" не спрацьовують, спробуйте видалити кілька байтів, що відкладаються:
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, '-_')
Якщо у ваших даних ви не бачите символів мінусу та підкреслення, але бачите плюсові та нарізні символи, тоді у вас є інша проблема, і, можливо, знадобляться трюки щодо доповнення та видалення.
Якщо ви не бачите у своїх даних жодного мінусу, підкреслення, плюсу та косої риси, то вам потрібно визначити два альтернативних символи; вони будуть такими, яких немає в [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
base64.b64decode(strg, '-_')
? Це апріорі, не турбуючись надавати будь-які вибіркові дані, найімовірніше рішення Python для вашої проблеми. Запропоновані "методи" - це ПРОБЛЕМНІ пропозиції, НЕОБХІДНО "вразити і пропустити", враховуючи нестабільність поданої інформації.