ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java下载csv乱码问题

2022-09-02 17:30:23  阅读:267  来源: 互联网

标签:write outputStream java dataCleanManagement fis 乱码 new csv response


一.问题。

  用EXCEL打开文件时,总是产生乱码,但是用NOTEPAD++打开时,显示正常。然后,在NOTEPADD++的“格式”工具栏中查了一下文件编码,发现是“以UTF-8格式编码”。

二.解决方法。

  以CSV方式导出的文件中默认不含BOM信息,通过给将要输出的内容设置BOM标识(以 EF BB BF 开头的字节流)即可解决该问题。追加BOM标识 outputStream.write(0xef); outputStream.write(0xbb); outputStream.write(0xbf);

三.完整代码。

    @GetMapping(value = "/downloadFile",produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public Object download(String id,HttpServletResponse response) {
        try {
            DataCleanManagement dataCleanManagement = dataCleanManagementService.getById(id);
            if (dataCleanManagement == null){
                return ResultVO.fail("文件不存在");
            }
            String path = config.filePath + File.separator + dataCleanManagement.getFilePath() + File.separator + dataCleanManagement.getResultFile();
            File file = new File(path);

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();

            // 清空response
            response.reset();
            // 设置response的Header,给文件名进行utf-8编码,不然下载的时候文件名乱码不对
            response.addHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode (file.getName(), "UTF-8" ));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/vnd.ms-excel;charset=gb2312");
            outputStream.write(0xef);
            outputStream.write(0xbb);
            outputStream.write(0xbf);
            outputStream.write(buffer);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            log.info(e.getLocalizedMessage(),e);
        }

        return null;
    }

以上代码请供参考,如有不当,请及时指出!

标签:write,outputStream,java,dataCleanManagement,fis,乱码,new,csv,response
来源: https://www.cnblogs.com/aozhestudy/p/16650672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有