java PrintWriter下载文件乱码处理方案

记录踩过的坑:

前提条件:

使用文件流:PrintWriter out = response.getWriter();

系统编码格式:UTF-8

读取文件格式:GBK

过程:

开始以为是response有问题   修改编码格式

request.setCharacterEncoding("utf-8"); //只对post请求有用
response.setContentType("text/text;charset=utf-8");
response.setHeader("Content-Type", "utf-8");
response.setLocale(new java.util.Locale("zh","CN"));

然后  无果。

猜想:由于文件编码格式为GBK,所以更换获取文件流的方法

BufferedReader br = new BufferedReader(new InputStreamReader(input, "GBK"));

已添加,添加后结果可以解析正常输出?记不清了

之后发现   直接使用new String(str.getBytes("UTF-8"), "GBK");  下载文件会奇数中文乱码   怀疑是在拦截器从GBK转成UTF-8乱码,但是直接将UTF-8格式的数据print进out中   输出却会乱码  奇怪???

最后解决方案

byte[]  responseBytes= new byte[sb.toString().length()]; 
responseBytes = sb.toString().getBytes("UTF-8");
response.setContentLength(responseBytes.length);
response.getOutputStream().write(responseBytes);

解决原因:

更换文件流方式  直接指定编码格式   但是不适用大文件

历时  一天半   解决人并不是自己    好吧 ⊙﹏⊙  但是长知识了   其中有想法更换下载方式  但是技术水平有限  抛之脑后 总想着解决编码格式问题,看来以后还是要从多方面思考问题啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值