Проблемы кодирования Base58 и utf-8 в Python 3.6.5 - PullRequest
0 голосов
/ 27 апреля 2018

Я использую Python 3.6.5.

Здравствуйте, у меня проблемы с кодировкой. Я полагаю, что проблема связана с попытками использовать base58 и utf-8. Эта часть программы работала в Python 2.7.14, и я пытаюсь преобразовать ее в Python 3.6.5.

def save_asset(asset):
nameString = '{0}_!_{1}'.format(asset['Name'].encode('utf-8').strip(), asset['AssetTypeID'])
filename = base58.b58encode(nameString)+'.png'

Вывод Cmd:

File "Transfer.py", line 315, in start_download
    saveAttempt = save_asset(a)
File "Transfer.py", line 221, in save_asset
    filename = base58.b58encode(nameString)+'.png'
TypeError: can't concat str to bytes

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

base58.b58encode(nameString) имеет тип байтов. Вы не можете объединить строку '.png' с типом байтов.

Вы можете использовать как ниже

filename = base58.b58encode(nameString)+base58.b58encode('.png')
print(filename)
>>b'blah-blah-byte-string'
0 голосов
/ 27 апреля 2018

Может быть b58encode (из любой используемой вами библиотеки) работает так же, как и b64encode из стандартной библиотеки, и возвращает массив байтов, а не текстовую строку.

Если вы хотите, чтобы ваш filename был байтовым массивом, используйте b".png". Если вы хотите, чтобы это была текстовая строка, декодируйте байты, возвращаемые b58encode, используя .decode("ascii") (многие другие кодировки также должны работать, но это эффективно).

...