Параметры передаются в байтах, а мне они нужны как строки.В поисках более чистого способа сделать это - PullRequest
0 голосов
/ 22 мая 2018

Я ищу лучший способ решения возникшей у меня проблемы.По сути, у меня есть метод, который принимает 2 параметра, форматирует строки определенным образом, а base64 это кодирует.Проблема, с которой я сталкиваюсь, заключается в том, что полученные параметры кодируются в байтах, и мне нужно декодировать его, а затем перекодировать перед тем, как base64 закодирует строку, что кажется не очень чистым решением.Ниже приведен пример моего текущего кода (который работает):

item = b64encode("{} and {}".format(first.decode('utf-8'), second.decode('utf-8')).encode('utf-8'))

Если я не декодирую first и second, то я сталкиваюсь с проблемой, когда кодированное значение base64 невернопотому что first и second являются байтами вместо необработанных строк.

1 Ответ

0 голосов
/ 22 мая 2018

Декодирование и кодирование необходимы только потому, что вы хотите вызвать str.format, чтобы объединить вашу первую и вторую строки вместе.Но если вы объедините их каким-либо другим способом, вам не нужно конвертировать.

К сожалению, тип bytes не имеет метода .format, но есть другие способы собрать ваши байты,Например, ручное добавление:

>>> first = b"foo"
>>> second = b"bar"
>>> base64.b64encode(first + b" and " + second)
b'Zm9vIGFuZCBiYXI='

... или предшественник .format, форматирование в процентах:

>>> base64.b64encode(b"%b and %b" % (first, second))
b'Zm9vIGFuZCBiYXI='
...