#python #python-3.x #token
#python #python-3.x #токен
Вопрос:
Я получаю сообщение об ошибке при преобразовании base 64 в python, я не могу найти решение
uniq_token_hash = hashlib.sha256(uniq_token_string.encode('UTF-8')).hexdigest()
print ('UNIQ HASH: %s' % uniq_token_hash)
auth_token = b64encode('%s;%s;%s' % (devapp,unix_timestamp, uniq_token_hash))
print ('AUTH TOKEN: %s' % auth_token)
line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'
Ответ №1:
В Python есть два вида строк. Первый состоит из кодовых точек (символов) в Юникоде, и он вызывается str
. Второй — это последовательность байтов (небольшие целые числа от 0 до 255), и он вызывается bytes
. b64encode
требуется bytes
в качестве входных данных. Вы уже знаете, как преобразовать str
в bytes
, потому что вы сделали это один раз .encode
.
auth_token = b64encode(('%s;%s;%s' % (devapp,unix_timestamp, uniq_token_hash)).encode('UTF-8'))
Ответ №2:
Вы должны перенести строку UTF-8 в простой байтовый массив, вы можете изменить строку на байтовый массив с помощью следующего кода
old_string = "string"
byte_array = old.string.encode()
# returns b'string'
new_string = byte_array.decode()
В последней версии Python я бы использовал f’string . Может быть, использовать что-то вроде этого:
byte_array = f'{devapp};{unix_timestamp};{uniq_token_hash}'.encode()
auth_token = b64encode(byte_array)
Пожалуйста, имейте в виду, что вы должны тщательно обрабатывать кодирование и хорошо знать, что и как вы храните.