在文件下载时通过在报文头中设置文件名来设置下载的文件名。例
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName)
但假如文件名为中文的时候,会发现文件名乱码。处理方法是讲文件名根据不同的浏览器转码。
/** * 根据不同浏览器将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. * * @param s * 原文件名 * @return 重新编码后的文件名 */ public static String toUtf8String(HttpServletRequest request, String s) { String agent = request.getHeader("User-Agent"); try { boolean isFireFox = (agent != null && agent.toLowerCase().indexOf( "firefox") != -1); if (isFireFox) { s = new String(s.getBytes("UTF-8"), "ISO8859-1"); } else { s = toUtf8String(s); if ((agent != null && agent.indexOf("MSIE") != -1)) { // see http://support.microsoft.com/default.aspx?kbid=816868 if (s.length() > 150) { // 根据request的locale 得出可能的编码 s = new String(s.getBytes("UTF-8"), "ISO8859-1"); } } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return s; }