java 下载文件wps可以正常打开,使用office打开乱码,普通用户及程序员解决方案 |
您所在的位置:网站首页 › java导出csv文件用excel打开乱码 › java 下载文件wps可以正常打开,使用office打开乱码,普通用户及程序员解决方案 |
分析
乱码,一般都是中文乱码,英文正常显示。导致这个问题有且仅有一个原因,那就是保存文件的编码格式和打开文件的编码格式不同。 解决知道问题的原因就好解决了,我们可以打开这个文件,查看其编码格式。以csv文件为例,使用记事本打开,文件---->另存为 就可以看到保存文件的编码格式了。 1.普通用户解决方案 如果你是普通用户,只想用office打开这个文件,使用记事本将这个文件打开,在另存为中设置文件的编码格式为 ANSI并保存。再次使用wps 和 office打开,都不乱码。 2.程序员解决方案 如果你是程序员,这个是文件程序写入的,每次用office就乱码,那肯定是不行的。 总不能让用户不使用office、或者每次设置一下编码再打开吧下载文件方法中,写入文件内容时设置编码格式为GBK //设置文件下载编码为 GBK @RequestMapping("/testDownloadFile.do") public void testDownloadFile(HttpServletResponse response){ String filename=emailGradeTask.getName()+".csv"; // 清空response response.reset(); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"),"ISO-8859-1")); //设置响应的编码格式为GBK response.setCharacterEncoding("GBK"); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); String resultDataPath = emailGradeStat.getResultDataPath(); //从分布式文件存储系统上下载流文件 InputStream input = GetClient.doGet(resultDataPath); byte[] bytes=null; BufferedReader reader=new BufferedReader(new InputStreamReader(input)); String line=null; while ((line=reader.readLine())!=null){ line+=","+"\n"; //以GBK编码写入文件内容 bytes = line.getBytes("GBK"); toClient.write(bytes); } toClient.flush(); toClient.close(); }测试:使用wps和office都可以不乱码打开,测试通过! 延伸其实这个问题是wps和office两款软件的兼容性引起的。wps的兼容性更好,不管你文件是用什么格式保存的,它都可以识别并用你保存的格式打开;office 没有识别文件保存编码,都是以ANSI这一种方式打开。可以说office很傲慢,忽视用户体验,也可以说国产wps软件很厉害,兼容性好。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |