По заданной строке как узнать, нужно ли ее декодировать? - PullRequest
1 голос
/ 07 октября 2009

Я использую модуль Python base64 и получаю строку, которая может быть закодирована или не закодирована. Я хотел бы сделать что-то вроде:

if isEncoded(s):
   output = base64.decodestring(s)
else:
   output = s

идеи?

Ответы [ 3 ]

10 голосов
/ 07 октября 2009

В общем, это невозможно; например, если вы получили строку «MjMj», как вы могли узнать, декодирован ли он и должен ли он использоваться как есть, или как «23 #»?

5 голосов
/ 07 октября 2009

Вы можете просто попробовать и посмотреть, что получится:

import base64

def decode_if_necessary(s):
    try:
         return base64.decodestring(s)
    except:
         return s

Но вы должны спросить себя: что, если исходное сообщение на самом деле было синтаксически допустимой строкой base64, но не предназначено для нее? Тогда «расшифровка» пройдет успешно, но результат не является обязательным выводом. Поэтому я должен спросить: действительно ли это , что вы хотите?

Редактировать: Обратите внимание, что decodestring устарело.

4 голосов
/ 19 октября 2009

Вы можете проверить, может ли строка быть закодирована в base64 . В общем, функция может прогнозировать с точностью 75% +, если данные закодированы.

def isBase64(s):
    return (len(s) % 4 == 0) and re.match('^[A-Za-z0-9+/]+[=]{0,2}$', s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...