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

3 投票
2 回答
1690 浏览
提问于 2025-04-15 16:41

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

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

response.write('text')

return response

如果我把文件名写死(也就是直接写上去),它可以正常工作。但是如果我试着用数据库里的数据来创建文件名,而这些数据里有一些非ASCII字符(比如ó),我就会遇到一个叫做UnicodeEncodeError的错误。请问我该怎么用数据库里的文件名而不出现这个错误呢?

2 个回答

3

你可以在Django这边解决这个问题,但不能保证在所有浏览器上都能正常工作。

可以查看这个测试案例:http://greenbytes.de/tech/tc2231/

想了解更多细节,可以看看这个问题,里面有个代码片段可以处理大部分情况。

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

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答