我正在尝试在Django中动态创建文件:
response = HttpResponse(mimetype='text/txt')
response['Content-Disposition'] = 'attachment; filename=%s' % filename # UnicodeEncodeError
response.write('text')
return response
如果我对文件名进行硬编码,它可以正常工作,但如果我尝试从包含非ascii字符的DB数据创建文件名(如ó),我会收到UnicodeEncodeError异常。如何在不获得异常的情况下使用DB文件名?
答案 0 :(得分:5)
from django.utils.encoding import smart_str
...
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(filename)
答案 1 :(得分:3)
您可以在Django端修复此问题,但无法保证它可以在所有浏览器中使用。
查看http://greenbytes.de/tech/tc2231/处的测试用例。
有关详细信息,请参阅this question,该链接指向处理大多数情况的代码段。