100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java导出乱码_导出文件乱码问题处理(java)

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

时间:2019-04-07 04:50:50

相关推荐

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

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

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

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

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

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

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

fileName= .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的方式,直接采用

//采用该种方法

fileName = .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字符集编码:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。