具有非ascii字符的数据库中的Django文件名

时间:2009-12-04 11:53:13

标签: python django utf-8

我正在尝试在Django中动态创建文件:

response = HttpResponse(mimetype='text/txt')
response['Content-Disposition'] = 'attachment; filename=%s' % filename # UnicodeEncodeError

response.write('text')

return response

如果我对文件名进行硬编码,它可以正常工作,但如果我尝试从包含非ascii字符的DB数据创建文件名(如ó),我会收到UnicodeEncodeError异常。如何在不获得异常的情况下使用DB文件名?

2 个答案:

答案 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,该链接指向处理大多数情况的代码段。