`
dzl84394
  • 浏览: 57803 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

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);

这才是王道

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics