Как вы используете переменный аргумент в base64.b64encode, но когда я не использую окно приглашения? - PullRequest
0 голосов
/ 11 октября 2019

Этот вопрос похож на этот один здесь, но если я вставлю это в этот код следующим образом:

import base64
theone = input('Enter your plaintext: ')
encoded = str(base64.b64encode(theone))
encoded = base64.b64encode(encoded.encode('ascii'))
encoded = encoded[2:]
o = len(encoded)
o = o-1
encoded = encoded[:o]
print(encoded)

, то возникает эта проблема:

line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'

А потом, если я удалю эту строку кода:

encoded = base64.b64encode(encoded.encode('ascii'))

, тогда возникнет та же ошибка. Я не уверен, что делать отсюда, и буду благодарен за любую помощь.

1 Ответ

1 голос
/ 11 октября 2019

У вас проблемы с байтами и строками . Значение, возвращаемое вводом, является строкой (str), но base64.b64encode ожидает байтов (bytes).

Если вы печатаете экземпляр bytes, вы видите что-то вроде

b'spam'

Чтобы удалить ведущий 'b', вам необходимо декодировать обратно в str.

Чтобы ваш код работал, передайте байты в base64.b64encode и декодируйте результатраспечатать его.

>>> theone = input('Enter your plaintext: ')
Enter your plaintext: Hello World!
>>> encoded = base64.b64encode(theone.encode())
>>> encoded
b'SGVsbG8gV29ybGQh'
>>> print(encoded.decode())
SGVsbG8gV29ybGQh
...