Удалить новую строку "\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', '')
Любые идеи? Благодаря
Ответы
Ответ 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]