1. 程式人生 > >下載檔案時,檔名亂碼問題

下載檔案時,檔名亂碼問題

在檔案下載時通過在報文頭中設定檔名來設定下載的檔名。例

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;
	}