Java中瀏覽器的文件下載時文件名亂碼問題


我最近在開發時遇到了文件另存為時文件名出現亂碼,在火狐上正常的文件名,在IE中又出現亂碼問題,然后好不容易在IE下調試好了文件名亂碼問題,在火狐下又出現亂碼,最后終於感覺這樣是能解決了。具體如下:

 1      public static String toUtf8String(String s) { 
 2      
 3             StringBuffer sb = new StringBuffer(); 
 4             for (int i = 0; i < s.length(); i++) { 
 5                 char c = s.charAt(i); 
 6                 if (c >= 0 && c <= 255) { 
 7                     sb.append(c); 
 8                 } else { 
 9                     byte[] b; 
10                     try { 
11                         b = Character.toString(c).getBytes("utf-8"); 
12                     } catch (Exception ex) { 
13                         exceptionUtil.error("將文件名中的漢字轉為UTF8編碼的串時錯誤,輸入的字符串為:" + s); 
14                         b = new byte[0]; 
15                     } 
16                     for (int j = 0; j < b.length; j++) { 
17                         int k = b[j]; 
18                         if (k < 0) 
19                             k += 256; 
20                         sb.append("%" + Integer.toHexString(k).toUpperCase()); 
21                     } 
22                 } 
23             } 
24             return sb.toString(); 
25         } 
26      
27         /** 
28          * 根據不同瀏覽器將文件名中的漢字轉為UTF8編碼的串,以便下載時能正確顯示另存的文件名. 
29          *  
30          * @param s 
31          *            原文件名 
32          * @return 重新編碼后的文件名 
33          */ 
34         public static String toUtf8String(HttpServletRequest request, String s) { 
35             String agent = request.getHeader("User-Agent"); 
36             try { 
37                 boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1); 
38                 if (isFireFox) { 
39                     s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
40                 } else { 
41                     s = StringUtil.toUtf8String(s); 
42                     if ((agent != null && agent.indexOf("MSIE") != -1)) { 
43                         // see http://support.microsoft.com/default.aspx?kbid=816868 
44                         if (s.length() > 150) { 
45                             // 根據request的locale 得出可能的編碼 
46                             s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
47                         } 
48                     } 
49                 } 
50             } catch (UnsupportedEncodingException e) { 
51                 e.printStackTrace(); 
52             } 
53             return s; 
54         } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM