You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.6.5中Base58与UTF-8编码兼容问题求助

解决Python3中Base58与UTF-8编码兼容问题

嘿,这个问题我太熟了——Python 2和3的字符串/字节流严格区分,正是导致你代码报错的核心原因!

问题根源

在Python 2里,str和bytes几乎是等价类型,所以你把encode('utf-8')后的字节流和AssetTypeID直接格式化拼接成字符串,再传给base58.b58encode完全没问题。但到了Python 3:

  • asset['Name'].encode('utf-8')得到的是bytes类型
  • 用format拼接时,bytes会被自动转成类似b'xxx'的字符串格式,最终nameString是str类型
  • 而base58.b58encode在Python 3中要求输入必须是bytes类型,传入str就会触发编码异常

修复后的代码

def save_asset(asset):
    # 将AssetTypeID转为bytes类型(根据实际类型调整,这里假设是字符串或数字)
    asset_type_bytes = str(asset['AssetTypeID']).encode('utf-8')
    # 拼接两个bytes对象,用b'_!_'分隔
    name_bytes = b'_!_'.join([asset['Name'].encode('utf-8').strip(), asset_type_bytes])
    # 对bytes进行base58编码,再解码为字符串,最后拼接文件名后缀
    filename = base58.b58encode(name_bytes).decode('utf-8') + '.png'

关键调整点

  • 所有参与拼接的内容都统一为bytes类型,避免str和bytes混合操作
  • 使用b'_!_'.join()来拼接字节流,比format更适配bytes场景
  • 最后把base58编码后的bytes解码为str,再和.png拼接成合法的文件名字符串

这样修改后,代码就能在Python 3.6.5中正常运行,逻辑和Python 2版本保持一致。

内容的提问来源于stack exchange,提问作者Menace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:53:32