Кодирование строки в base64 в Python 2.x против Python 3.x - PullRequest
0 голосов
/ 09 мая 2019

В Python 2 я мог это сделать:

>>> var='this is a simple string'
>>> var.encode('base64')
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'

Легко! К сожалению, это не работает в Python 3. К счастью, я смог найти альтернативный способ выполнить то же самое в Python 3:

>>> var='this is a simple string'
>>> import base64
>>> base64.b64encode(var.encode()).decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc='

Но это ужасно! Там должен быть лучший путь! Итак, я немного покопался и нашел второй, альтернативный метод выполнения того, что раньше было очень простой задачей:

>>> var='this is a simple string'
>>> import codecs
>>> codecs.encode(var.encode(),"base64_codec").decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'

Это еще хуже! Я не забочусь о конце новой строки! Что меня волнует, боже, есть должен , чтобы быть лучшим способом сделать это в Python 3, верно?

Я не спрашиваю "почему". Я спрашиваю, есть ли лучший способ справиться с этим простым делом.

1 Ответ

1 голос
/ 10 мая 2019

Так что лучше всегда субъективно. Лучшим решением для одного человека может быть кошмар для другого. Для чего стоит написать вспомогательные функции, чтобы сделать это:

import base64

def base64_encode(string: str) -> str:
    '''
    Encodes the provided byte string into base64
    :param string: A byte string to be encoded. Pass in as b'string to encode'
    :return: a base64 encoded byte string
    '''
    return base64.b64encode(string)


def base64_decode_as_string(bytestring: bytes) -> str:
    '''
    Decodes a base64 encoded byte string into a normal unencoded string
    :param bytestring: The encoded string
    :return: an ascii converted, unencoded string
    '''
    bytestring = base64.b64decode(bytestring)
    return bytestring.decode('ascii')


string = b'string to encode'
encoded = base64_encode(string)
print(encoded)
decoded = base64_decode_as_string(encoded)
print(decoded)

При запуске выдает следующее:

b'c3RyaW5nIHRvIGVuY29kZQ=='
string to encode
...