zoukankan      html  css  js  c++  java
  • 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         } 
  • 相关阅读:
    进程与线程
    the art of seo(chapter seven)
    the art of seo(chapter six)
    the art of seo(chapter five)
    the art of seo(chapter four)
    the art of seo(chapter three)
    the art of seo(chapter two)
    the art of seo(chapter one)
    Sentinel Cluster流程分析
    Sentinel Core流程分析
  • 原文地址:https://www.cnblogs.com/quanyongan/p/3024988.html
Copyright © 2011-2022 走看看