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         } 
  • 相关阅读:
    扑克牌顺子
    数组转 二叉树 ,并且输出二叉树的右视图
    数组中逆序对(归并排序思想)
    链表数字加和
    回文数字
    数组中 只出现一次的数
    判断是否有从根节点到叶子节点的节点值之和等于 sum
    双指针求 3个数和 为0的 数
    vue项目将css,js全部打包到html文件配置
    webpack4配置优化
  • 原文地址:https://www.cnblogs.com/quanyongan/p/3024988.html
Copyright © 2011-2022 走看看