从数据库获取Django非ASCII字符文件名

3

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

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

response.write('text')

return response

如果我将文件名硬编码,那么它可以正常工作,但是如果我尝试从包含非ASCII字符(如ó)的DB数据创建文件名,则会出现UnicodeEncodeError异常。如何在不出现异常的情况下使用DB文件名?


这个回答解决了您的问题吗?如何为HTTP头编码UTF8文件名?(Python,Django) - user3064538
2个回答

4
from django.utils.encoding import smart_str
...

 response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(filename)

但并非所有的UTF符号都可以被转换 ;) - slav0nic

3
你可以在Django端解决问题,但不能保证在所有浏览器中都能正常工作。
请查看http://greenbytes.de/tech/tc2231/上的测试用例。
有关详细信息,请参见此问题,其中链接到一个处理大多数情况的代码片段。

十年后,我认为“不能保证在所有浏览器中都能正常工作”这一说法已经不再成立了。 - user3064538

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接