DefineClass 2020-04-09 00:52 采纳率: 0%
浏览 2197

Springboot HttpServletResponse导出xls文件乱码

测试方式如下

  • 直接保存文件到本地 - 不乱码
  • postman测试接口,send and download - 中文乱码,数据正常
  • swagger测试接口,文件全部乱码:锟斤拷唷?锟?;锟斤拷 ### 代码历史如下 HttpServletResponse res = null; res = getResponse(); res.reset(); // res.setContentType("octets/stream"); res.setContentType("application/octet-stream; charset=utf-8"); // res.setContentType("application/vnd.ms-excel;charset=utf-8"); // res.setContentType("application/msexcel"); String fileName = sensorShowNo + "_eff_data_export"; // res.setCharacterEncoding("UTF-8"); // res.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1") + ".xls"); // res.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls","UTF-8")); res.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".xls"); // res.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"), "ISO8859-1") + ".xls"); OutputStream out = response.getOutputStream(); Workbook workbook = sensorDataService.exportEff(sensor.getSensorNo(), sensorSearch.getStartTime(), sensorSearch.getEndTime()); workbook.write(res.getOutputStream()); out.flush(); out.close();
  • 写回答

1条回答 默认 最新

  • Ctrl+C+V程序猿 2023-06-25 10:52
    关注

    OutputStream是字节流,将文本按字节写入文件,而一个汉字是两个字节,无法一次写入,就会出现乱码,解决方法是使用OutputStreamWriter将字节流转换为字符流写入,同时指定utf-8编码.
    new OutputStreamWriter(new OutputStream(file), "utf-8"); 你用这个试下

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料