您的位置:首页 > Web前端 > JavaScript

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

2012-02-28 15:38 246 查看
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);

这才是王道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: