我正在尝试将文件传送到浏览器中,文件名中可能包含非ASCII字符,我一直在使用Content-Disposition
标题来告诉浏览器所需的文件名在用户想要保存文件时使用。
我查看了RFC 6266我看到filename*
的使用情况。
因此,作为测试,我在Java servlet中设置了以下标头(其中resp
是HttpServletResponse
):
resp.setHeader("Content-Disposition", "inline; filename=test.png; filename*=utf-8''test%20x.png");
似乎所有“现代”浏览器现在都理解这一点并支持filename*
,并且更喜欢它而不是filename
的值集。我用阿拉伯字符试过它,它们在最新的Chrome和Firefox版本以及IE11中运行良好。但是:与其他浏览器不同,IE似乎不理解%20
。当我尝试保存文件时,文件名为test%20x.png
而不是test x.png
。
之前有没有遇到过这个?这是IE漏洞吗?如果是这样,有解决方法吗? (我可以用下划线替换空格,但也许我不需要。)
也许我在编码时做错了,或者可能与Java Servlet环境有关。 (我对此表示怀疑,但无论如何我都将这个问题标记为Java Servlet。) 如果有必要,我可以提供有关servlet如何传递文件的更多详细信息,但也许有人在不同的环境中也可以看到IE。