jsp导出excel中文乱码,鄙视不验证就转发的

来源:互联网 发布:软件设计师考试难吗 编辑:程序博客网 时间:2024/05/29 16:23

jsp导出excel文件,导出时firefox乱码或360乱码,反正不正常,

原本代码如下:

 response.setHeader("Content-Disposition", "attachment;filename="
   + new String(("财务报表-采购明细统计.xls").getBytes(), "ISO-8859-1"));

 

这时firefox是好的,我也没测IE、360啥的

第一次提交就是这样,我相信大家也都是这个样子的,

会计说她IE打开时乱码,我就搜了一下,网上大部分提供了一个方法:

 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) {
              System.out.println(ex);
                   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();
 }

jsp里面代码如下:

 response.setHeader("Content-Disposition", "attachment;filename="
   + fb.toUtf8String("财务报表_支付宝汇总.xls"));

可是并没有解决问题,但是大部分网页搜出来的都是这样的

这时才发现是浏览器的问题

解决方案代码如下:

<%@page import="java.net.URLEncoder"%>

 

String outfilename = "财务报表.xls";
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0)
   outfilename = new String(outfilename.getBytes("UTF-8"), "ISO8859-1");//firefox

else if (request.getHeader("User-Agent").toUpperCase().indexOf("IE") > 0)
   outfilename = URLEncoder.encode(outfilename, "UTF-8");//IE浏览器 
response.setHeader("Content-Disposition", "attachment;filename="+outfilename);

这才是王道

原创粉丝点击