Java使用OpenCSV写入含逗号的CSV字段格式异常问题咨询
OpenCSV生成含逗号字段CSV解析异常问题解决方案
根因分析
问题出在CSVWriter构造参数中指定了ICSVWriter.NO_QUOTE_CHARACTER:
- 该配置会强制OpenCSV不对任何字段添加包裹引号,遇到字段内包含分隔符(逗号)的场景时,只能依赖转义字符处理
- Excel默认解析CSV规则不识别该场景下的转义逻辑,会误把字段内部的逗号识别为列分隔符,最终出现字段拆分错误、逗号丢失、多余引号的异常表现
修复方案
将构造参数中的引号配置改为默认的双引号即可,OpenCSV会自动给包含逗号、换行、特殊字符的字段添加双引号包裹,Excel解析时会自动把包裹用的双引号识别为格式标记,不会显示在单元格内容中,字段内的逗号也会正常保留。
修改后的代码如下:
try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) { CSVWriter csvWriter = new CSVWriter( fileWriter, ICSVWriter.DEFAULT_SEPARATOR, // 把原来的NO_QUOTE_CHARACTER替换为默认引号字符 ICSVWriter.DEFAULT_QUOTE_CHARACTER, ICSVWriter.DEFAULT_ESCAPE_CHARACTER, ICSVWriter.DEFAULT_LINE_END); csvWriter.writeNext(headers); csvWriter.writeAll(rows); } catch (IOException e) { throw new IOException(e); }
效果验证
修改后写入["field, 1", "field, 2", "field, 3"]时,生成的CSV原始内容为:
"field, 1","field, 2","field, 3"
用Excel打开后会分为3个独立列,单元格内容分别为field, 1、field, 2、field, 3,无多余引号,逗号正常展示,符合预期。
内容的提问来源于stack exchange,提问作者nerdlyist
相关产品推荐
相关产品推荐

