我一直在尝试下载带有中文文件名的附件,但是在下载时它们的编码方式有所变化,并且在有中文字符的地方保存了一些乱码文件名。
技术: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_äð”
我还尝试在引用后将*附加到文件名指令中:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Dispositionresponse.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
提前致谢。
最佳答案
尝试设置字符编码:
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的String调用此方法等效于
用text / html的String调用setContentType; charset = UTF-8。
可以重复调用此方法以更改字符编码。
如果在getWriter被调用后调用此方法,则该方法无效。
或在响应提交后调用。