下載檔案時,檔名亂碼問題
阿新 • • 發佈:2019-01-27
在檔案下載時通過在報文頭中設定檔名來設定下載的檔名。例
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; }