Подтвердить что ты не робот

Удалить новую строку "\n" из кодированных строк base64 в Python3?

Я пытаюсь сделать HTTPS-соединение в Python3, и когда я пытаюсь закодировать свое имя пользователя и пароль, метод base64 encodebytes возвращает закодированное значение с новым символом строки в конце "\n", и потому из этого я получаю сообщение об ошибке, когда пытаюсь подключиться.

Есть ли способ сообщить библиотеке base64 не добавлять новый символ строки при кодировании или что это лучший способ удалить этот новый символ строки? Я попытался использовать метод replace, но получаю следующую ошибку:

Traceback (most recent call last):
  File "data_consumer.py", line 33, in <module>
    auth_base64 = auth_base64.replace('\n', '')
TypeError: expected bytes, bytearray or buffer compatible object

Мой код:

auth = b'[email protected]:passWORD'
auth_base64 = base64.encodebytes(auth)
auth_base64 = auth_base64.replace('\n', '')

Любые идеи? Благодаря

4b9b3361

Ответ 1

Вместо encodestring рассмотрим использование b64encode. Позже не добавляется символ \n. например.

In [11]: auth = b'[email protected]:passWORD'

In [12]: base64.encodestring(auth)
Out[12]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA==\n'

In [13]: base64.b64encode(auth)
Out[13]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA=='

Он производит идентичную закодированную строку, кроме \n

Ответ 2

Следующий код будет работать

auth_base64 = auth_base64.decode('utf-8').replace('\n', '')

Ответ 3

Я согласен с замечанием base64.xxxx_encode() том, что base64.xxxx_encode() будет производить вывод без base64.xxxx_encode() строки \n.

Для тех, кто хочет получить более уверенное понимание, чем просто наблюдение, это официальное обещание (вроде), которое я могу найти по этой теме. В документации по Python 3 упоминается, что base64.encode(...) добавляет base64.encode(...) строки после каждых 76 байтов вывода. По сравнению с этим, все другие функции *_encode(...) вообще не упоминают о своем поведении линейного переноса, что, можно утверждать, можно считать "поведением без переноса строк". Что бы это ни стоило, в документации Python 2 вообще ничего не говорится о переносе строк.

Ответ 4

для использования на python3: -

binascii.b2a_base64 (cipher_text, newline = False)

для использования на python2:

binascii.b2a_base64 (cipher_text) [: -1]