广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Java下载文件时文件名乱码问题解决办法

    2018-11-14 08:50:15 次阅读 稿源:互联网
    零七广告
    代码如下:

    public static String toUtf8String(String s) {

                 StringBuffer sb = new StringBuffer();
                 for (int i = 0; i < s.length(); i++) {
                     char c = s.charAt(i);
                     if (c >= 0 && c <= 255) {
                         sb.append(c);
                     } else {
                         byte[] b;
                         try {
                             b = Character.toString(c).getBytes("utf-8");
                         } catch (Exception ex) {
                             exceptionUtil.error("将文件名中的汉字转为UTF8编码的串时错误,输入的字符串为:" + s);
                             b = new byte[0];
                         }
                         for (int j = 0; j < b.length; j++) {
                             int k = b[j];
                             if (k < 0)
                                 k += 256;
                             sb.append("%" + Integer.toHexString(k).toUpperCase());
                         }
                     }
                 }
                 return sb.toString();
             }

             /**
              * 根据不同浏览器将文件名中的汉字转为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 = StringUtil.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;
             }

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告