我一直在尝试下载带有中文文件名的附件,但不知何故,他们的编码会在下载时发生变化,并且在有中文分区的情况下会保存一些乱码文件。
技术:Java 服务器:Apache Tomcat
这是我已经尝试过的
response.setHeader("Content-Disposition", "attachment; filename=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");
输出(下载附件名称):“7_6_4_AM__2017_JS_003_W_äð”
在参考:
之后,我也尝试将*附加到filename指令 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
response.setHeader("Content-Disposition", "attachment; filename*=\"7_6_4_AM__2017_JS_003_南通凤凰服装_B1_108\"");
输出(下载的附件名称):“706.txt”
此外,
在我的研究中,我发现HTTP标头消息不能携带ISO-8859-1字符集之外的字符。
https://tools.ietf.org/html/rfc5987
先谢谢。
答案 0 :(得分:1)
尝试设置字符编码:
response.setCharacterEncoding("UTF-8");
您可能还想先对文件名进行编码:
filename= URLEncoder.encode(fileName, "UTF-8");
来自document
设置要发送的响应的字符编码(MIME字符集) 例如,客户端到UTF-8。如果字符编码有 已经由setContentType(java.lang.String)或设置 setLocale(java.util.Locale),此方法会覆盖它。调用 setContentType(java.lang.String),带有text / html和 使用UTF-8字符串调用此方法与 使用text / html的String调用setContentType;字符集= UTF-8。 可以重复调用此方法以更改字符编码。 如果在getWriter之后调用此方法,则此方法无效 在响应被提交之后或之后。