我一直在尝试下载带有中文文件名的附件,但是在下载时它们的编码方式有所变化,并且在有中文字符的地方保存了一些乱码文件名。

技术: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-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

提前致谢。

最佳答案

尝试设置字符编码:

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被调用后调用此方法,则该方法无效。
  或在响应提交后调用。

09-06 21:19