我使用 org.apache.catalina.util.URLEncoder 对文件名进行编码,并在内容处置标头中设置如下:
String encoded = urlEncoder.encode(fileName, StandardCharsets.UTF_8);
response.setHeader("Content-Disposition", "attachment;filename=\""+encodedFileName+"\"");
文件名:ຕົວຢ່າງ.pptx
编码:%E0%BA%95%E0%BA%BB%E0%BA%A7%E0%BA%A2%E0%BB%88%E0%BA%B2%E0%BA%87%pptx
在 Chrome 浏览器中下载时,它会正确解码并下载。但 Safari 不会解码名称,而是以编码格式下载。
此外,从 Safari 浏览器下载时,扩展名会附加到文件名中。 喜欢%E0%BA%95%E0%BA%BB%E0%BA%A7%E0%BA%A2%E0%BB%88%E0%BA%B2%E0%BA%87%2Epptx.pptx
谢谢,提前。
我尝试添加 UTF-8 并且成功了。
response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''\""+encodedFileName+"\"");
因为 URL 编码的文件名不可移植。
所有细节都在 RFC 6266 中;那里描述的格式适用于所有当前的浏览器。