java 下载文件wps可以正常打开,使用office打开乱码,普通用户及程序员解决方案

您所在的位置:网站首页 java导出csv文件用excel打开乱码 java 下载文件wps可以正常打开,使用office打开乱码,普通用户及程序员解决方案

java 下载文件wps可以正常打开,使用office打开乱码,普通用户及程序员解决方案

2023-09-29 16:02| 来源: 网络整理| 查看: 265

分析

乱码,一般都是中文乱码,英文正常显示。导致这个问题有且仅有一个原因,那就是保存文件的编码格式和打开文件的编码格式不同。

解决

知道问题的原因就好解决了,我们可以打开这个文件,查看其编码格式。以csv文件为例,使用记事本打开,文件---->另存为 就可以看到保存文件的编码格式了。 在这里插入图片描述 可以看到,这个文件是用utf-8保存的,为什么用wps可以打开,微软office 打开就乱码呢?

wps 打开该文件的编码格式为utf-8,而office 打开该文件的编码格式为ANSI。

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