之前因为flask_restful接受中文参数有问题改了系统默认编码
sys.setdefaultencoding('utf8')
本来以为之后就没有中文问题了,没想到文件下载send_from_directory有个坑,运行下面代码报错
return send_from_directory(dirpath, filename, as_attachment=True)
TypeError: must be unicode, not str
看网上说用下面代码,使用make_response可以处理中文问题,结果还是没用
response = make_response(send_from_directory(directory, filename, as_attachment=True))
response.headers["Content-Disposition"] = "attachment; filename={}".format(filename.encode().decode('latin-1'))
细看报错过程,是send_from_directory方法,make_response还没运行调用呢。考虑编码问题直接出在filename上,因此尝试如下代码,验证没有问题
send_from_directory(dirpath, filename.encode('utf-8').decode('utf-8'), as_attachment=True)