Python 3.6.5中的Base58和utf-8编码问题

时间:2018-04-26 22:25:09

标签: python utf-8 base58

我正在使用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 :(得分:1)

也许b58encode(来自您正在使用的任何库)以与标准库中b64encode相同的特殊方式工作,并返回一个字节数组,而不是文本字符串。

如果您希望filename成为字节数组,请改用b".png"。如果您希望它是一个文本字符串,请使用b58encode解码.decode("ascii")返回的字节(许多其他编码也应该有效,但那个编码是有效的。)

答案 1 :(得分:0)

base58.b58encode(nameString)是字节类型。您不能将字符串'.png'与字节类型连接起来。

您可以使用如下

filename = base58.b58encode(nameString)+base58.b58encode('.png')
print(filename)
>>b'blah-blah-byte-string'