记录踩过的坑:
前提条件:
使用文件流: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);
解决原因:
更换文件流方式 直接指定编码格式 但是不适用大文件
历时 一天半 解决人并不是自己 好吧 ⊙﹏⊙ 但是长知识了 其中有想法更换下载方式 但是技术水平有限 抛之脑后 总想着解决编码格式问题,看来以后还是要从多方面思考问题啊。