场景
文件下载时,我们可能会将文件名放在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有文件名,就会以该文件名作为保存的文件名。