这几天处理bug,在解决这个导出csv格式文件乱码的问题,
记录一下;
1,处理前代码

public static void exportList(String[] headers, String[] columns, List dtos, String sheetName,HttpServletResponse response) throws Exception {List header = Arrays.asList(headers);List fids = Arrays.asList(columns);List list = genDtoExportData(dtos, fids);File file = File.createTempFile("export", ".csv");StringBuffer sb = new StringBuffer("");for (String h : headers) {sb.append(transfer(h)).append(",");}sb.append("\r\n");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (Object obj : list) {for (Object obj2 : (List) obj) {if (obj2 instanceof Date) {sb.append(sdf.format((Date) obj2)).append(",");} else {sb.append(transfer(obj2.toString())).append(",");}}sb.append("\r\n");}OutputStream out = null;OutputStreamWriter writer = null;try {out = new FileOutputStream(file);writer = new OutputStreamWriter(out);writer.append(sb.toString());} catch (Exception e) {e.printStackTrace();} finally {if(writer != null){writer.close();}if(out != null){out.close();}}response.setContentType("text/csv; charset=\"utf-8\"");response.setHeader("Content-disposition", "attachment; filename="+transferFilename(sheetName)+".csv");byte[] buffer = new byte[1024];FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null)bis.close();if (fis != null)fis.close();file.delete();}}/** 处理双引号和逗号的特殊转译 */public static String transfer(String str) {String tempDescription = str;// 如果有逗号if (str.contains(",")) {// 如果还有双引号,先将双引号转义,避免两边加了双引号后转义错误if (str.contains("\"")) {tempDescription = str.replace("\"", "\"\"");}// 在将逗号转义tempDescription = "\"" + tempDescription + "\"";}return tempDescription;}

2,处理后代码

public static void exportList(String[] headers, String[] columns, List dtos, String sheetName, HttpServletResponse response) throws Exception {List header = Arrays.asList(headers);List fids = Arrays.asList(columns);List list = genDtoExportData(dtos, fids);File file = File.createTempFile("export", ".csv");StringBuffer sb = new StringBuffer("");for (String h : headers) {sb.append(transfer(h)).append(",");}sb.append("\r\n");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (Object obj : list) {for (Object obj2 : (List) obj) {if (obj2 instanceof Date) {sb.append(sdf.format((Date) obj2)).append(",");} else {sb.append(transfer(obj2.toString())).append(",");}}sb.append("\r\n");}OutputStream out = null;OutputStreamWriter writer = null;try {out = new FileOutputStream(file);writer = new OutputStreamWriter(out, "UTF-8");writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));  writer.append(sb.toString());} catch (Exception e) {e.printStackTrace();} finally {if(writer != null){writer.close();}if(out != null){out.close();}}response.setContentType("text/csv; charset=\"utf-8\"");response.setHeader("Content-disposition", "attachment; filename="+transferFilename(sheetName)+".csv");byte[] buffer = new byte[1024];FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null)bis.close();if (fis != null)fis.close();file.delete();}}/** 处理双引号和逗号的特殊转译 */public static String transfer(String str) {String tempDescription = str;// 如果有逗号if (str.contains(",")) {// 如果还有双引号,先将双引号转义,避免两边加了双引号后转义错误if (str.contains("\"")) {tempDescription = str.replace("\"", "\"\"");}// 在将逗号转义tempDescription = "\"" + tempDescription + "\"";}return tempDescription;}

看不出来改的哪里,没关系,下面这个是对比图

解决导出CSV文件乱码的问题相关推荐

  1. php导出csv文件乱码问题解决方法

    php导出csv文件乱码问题解决方法 说 这个问题之前首先来说一下什么是CSV文件?Comma Separator Value(逗号分隔值)是也.常常用来数据转换的中间文件存在,比如:从Mysql中导 ...

  2. java导出csv文件乱码_记一次java生成csv文件乱码的解决过程 (GB2312编码)

    系统:win7 (格式:中文(简体,中国)) 工具:Eclipse (默认编码utf-8) 服务两个:[restful接口]  和 [服务*** server]. 场景:[服务*** server]多 ...

  3. 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    先举个例子,分别以不指定编码.指定编码为 utf-8.指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一.不指定编码方式,直接存入 csv 文件 i ...

  4. Mysql 导入导出csv 中文乱码问题的解决方法

    导出csv: select t1.stid,t1.cateNodeId,t2.name,t1.name from (select p.stid,p.cateNodeId,r.name from Res ...

  5. mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法

    导入csv: 复制代码 代码如下: load data infile '/test.csv' into table table_name fields terminated by ','  optio ...

  6. csv导入mysql乱码问题,Mysql导入导出csv中文乱码问题的解决方法_MySQL

    bitsCN.com 导入csv: load data infile '/test.csv' into table table_name fields terminated by ',' option ...

  7. netbox 导出 csv 中文乱码、时区修改

    NetBox是IP地址管理(IPAM)和数据中心基础结构管理(DCIM)工具. NetBox最初是由的网络工程团队构想的,它是专门为满足网络和基础架构工程师的需求而开发的. 项目地址:https:// ...

  8. mysql导出csv乱码_Mysql 导入导出csv 中文乱码

    导入csv: 复制代码 代码如下: load data infile '/test.csv' into table table_name fields terminated by ','  optio ...

  9. PHP导出CSV文件出现乱码的解决方法

    PHP导出CSV文件出现乱码的解决方法 参考文章: (1)PHP导出CSV文件出现乱码的解决方法 (2)https://www.cnblogs.com/xingxia/p/php_csv.html 备 ...

最新文章

  1. 跨专业选修C语言看什么书,跨专业考研如何选择?!!!!!
  2. python super()函数(用来调用父类方法)
  3. [读书笔记] 两则之一: 100Gbps传输
  4. MTK 驱动(73)---MTK 6761平台 android O bootloader启动之 Pre-loader -amp;gt; Lk
  5. 背景图片固定(背景图片附着)(HTML、CSS)
  6. 关于mpvue 切换页面数据没清空
  7. C# 中使用反射的优缺点
  8. Oracle函数-分析函数-获取上一条(下一条)记录
  9. z世代消费力白皮书_年轻世代成消费主力军,时尚界迎来IP时代
  10. 怎么关闭win7计算机一键还原系统,win7一键还原按哪个键_win7一键还原
  11. Linux 环境下载百度云资源,Firefox插件(百度网盘助手)
  12. 从Code Review 谈如何做技术
  13. bzoj3047: Freda的传呼机bzoj2125: 最短路
  14. 电磁流体力学类毕业论文文献包含哪些?
  15. 哔咔漫画无响应,无法安装正确的应用
  16. 解决GitHub连不上的问题fatal: unable to access ‘https://github.com/..’: Failed to connect to github.com port
  17. v-if 和 v-show的区别是什么? 什么时候使用v-if更好? 什么时候用v-show更好?
  18. java-zxing扫描二维码和条形码(一维码)
  19. 百名学生教学用计算机,【敲敲黑板】本科教学合格评估知识学习之内涵解读 Day 13...
  20. 已知方位角和仰角求(单位)方向向量

热门文章

  1. 一步一步教你安装MeeGO和Windows 7双系统(上网本或笔记本)
  2. java中将html特殊字符作转义和取消转义操作
  3. 多个git账号的登录与切换
  4. Git--SSH登录
  5. python描述性统计离散型变量_数据的描述性统计(Python3 实现)
  6. ffmpeg中支持的音频互相转换的采样格式和声道分布
  7. 详解小程序的蓝牙模块
  8. 抽象类、抽象方法、封装的概念、接口的含义(Java 从自学到就业 第12天)
  9. 尼日利亚区块链专家认为加密货币可提振非洲经济
  10. python find() 和 index() 方法