pandas生成CSV转base64下载时出现UnicodeDecodeError问题求助
问题根因
你的报错和CSV编码、下载逻辑没有关联,错误栈明确指向pickle.load加载模型文件的步骤:
pickle生成的.pkl模型是二进制格式文件,你用默认文本模式打开文件时,Python会尝试用UTF-8解码二进制内容,二进制字节0x80不属于UTF-8有效编码范围,因此触发解码报错。
另外你写的CSV下载函数也存在逻辑错误,即使模型加载修复后,原代码也会生成错误的下载链接,导致下载的CSV文件损坏。
修复步骤
1. 修复模型加载代码
打开.pkl文件时指定二进制读模式rb:
# 原错误代码 load_model = pickle.load(open('sars_cov_proteinase_model.pkl')) # 修改后正确代码 load_model = pickle.load(open('sars_cov_proteinase_model.pkl', 'rb'))
2. 修复CSV下载函数逻辑
修正编码转换逻辑,正确生成base64格式的下载链接:
def filedownload(df): # 生成CSV字符串,用utf-8-sig编码兼容Excel打开不乱码 csv = df.to_csv(index=False, encoding='utf-8-sig') # 字符串转字节后做base64编码,再转字符串放入href b64_encoded = base64.b64encode(csv.encode('utf-8')).decode() href = f'<a href="data:file/csv;base64,{b64_encoded}" download="prediction.csv">Download Predictions</a>' return href
3. 本地CSV生成优化(可选)
如果需要本地导出的CSV文件正常打开,to_csv时也指定编码:
df2.to_csv('example_generated.csv', index=False, encoding='utf-8-sig')
内容的提问来源于stack exchange,提问作者hamiq
相关产品推荐
相关产品推荐

