java导出乱码_导出文件乱码问题处理(java)

最近在处理业务时,之前一个很正常的功能,因为换了一个服务器环境(由windows到linux),导出文件时文件名fileName突然就变成了乱码,无论如何转变编码方式,总不得其解,最终采用无论前后台,均不通过转为GBK或先转为ISO-8850-1再转为GBK和UTF-8的方式,而是直接前后统一使用UTF-8编码才正常。

最开始使用方法(代码中用了6年的方法):

fileName = new String(infor.getBytes("GB2312"), "ISO-8859-1");

response.setHeader("Content-disposition", "attachment; filename="

+ fileName);

5330167.html

最新版产品中,更新新乐jdk1.7,在linux环境下时,以该种方式下,导出文件在ie直接乱码,在chrome中呈现“-----”乱码符号。

一开始以为是GB2312不能转换一些特殊汉字导致,改为GBK,问题依旧;

后来想着是不是需要转为统一UTF-8编码,还是不行。

在网上搜索资料,有人提到,ie和火狐等其他浏览器需要分开判断于是有了下面的解决方案:

5330167.html

String userAgent = request.getHeader("User-Agent");//针对IE或者以IE为内核的浏览器:

if (userAgent.contains("MSIE")||userAgent.contains("Trident")) {

fileName= java.net.URLEncoder.encode(fileName, "UTF-8");

}else{//非IE浏览器的处理:

fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");

}

response.setHeader("Content-Type","application/msexcel");

response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));

response.setContentType("application/vnd.ms-excel;charset=utf-8");

经过这次修改,ie下如愿以偿的得到了正确编码,但是chrome问题依旧,最后干脆就直接采用统一的编码,前后端都用UTF-8,均不通过转为GBK或先转为ISO-8850-1再转为GBK和UTF-8的方式,直接采用

5330167.html

//采用该种方法

fileName = java.net.URLEncoder.encode(fileName, "UTF-8");

response.setHeader("Content-Type","application/msexcel");

response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));

response.setContentType("application/vnd.ms-excel;charset=utf-8");

这下不论是在ie还是在chrome,都呈现了正常编码。问题得以解决。

另外贴上开源中国"taote"老师的一篇文章--java字符集编码:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值