场景
文件下载时,我们可能会将文件名放在Response中:
filename = unicode('你好.txt').encode('utf-8')
response['Content-Disposition'] = 'attachement; filename=' + filename
这种方式,在现代浏览器比如Chrome, Firefox, Safari中,支持都挺好的。但在IE中,即使是IE.11中,都会出现乱码。
似乎,IE不支持filename中的非ASCII字符。
解决思路
不通过Response的Header中定义filename,而是通过请求url中加入utf-8文件名。
解决步骤
1. 修改URL
# 访问的URL,原来可能是这样的:
GET http://www.abc.com/resource/
# 现在应该是这样的:
GET http://www.abc.com/resource/你好.txt
2. 修改Response的disposition
# 去掉后面的'; filename='
response[Content-Disposition] = 'attachement'
这时,如果GET的返回是数据流(Stream),因为url有文件名,就会以该文件名作为保存的文件名。
本文介绍了一种解决IE浏览器中文件下载时出现乱码的问题。通过对URL进行修改并在响应头中调整设置来确保所有浏览器都能正确处理非ASCII字符的文件名。
1万+

被折叠的 条评论
为什么被折叠?



