You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用opencsv解析CSV时末尾双引号丢失,如何配置保留?

问题描述

在Java中使用opencsv读取CSV文件时,出现字段末尾双引号丢失的问题。读取器配置代码如下:

try (Reader reader = Files.newBufferedReader(pathToFile)) {
    CSVParser parser = new CSVParserBuilder().withSeparator(";").build();
    try (CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1)
        .withCSVParser(parser).build()) {
        List<String[]> csvFileData = csvReader.readAll();
        ....
    }}

CSV文件中的目标行内容:

123;00234;123;Max "Mustermann";something

解析后对应字段的结果:

Max "Mustermann

字段末尾的双引号消失,尝试配置withIgnoreQuotations(true)后仍无效果,需确认是否可通过CSVParser配置保留字段末尾的双引号。

解决方案

要完整保留字段中的双引号,需调整CSVParser的两项核心配置:

  • 禁用引号解析逻辑:withIgnoreQuotations(true)是禁用引号解析的基础,但仅靠此配置不够——opencsv默认将双引号(")识别为字段包裹符,仍会对其做特殊处理。
  • 替换默认引号字符:将引号字符设置为CSV文件中不会出现的特殊字符(例如空字符'\0'),让解析器彻底放弃对双引号的特殊处理。

修改后的Parser配置代码如下:

CSVParser parser = new CSVParserBuilder()
    .withSeparator(';')
    .withIgnoreQuotations(true)
    .withQuoteChar('\0') // 设置为无意义的空字符,彻底禁用引号解析逻辑
    .build();

配置完成后,opencsv会将所有内容视为普通文本,不会自动去除字段中的双引号,即可完整保留Max "Mustermann"中的末尾双引号。

注意:如果CSV文件中存在合法的双引号包裹字段场景,此配置会破坏原有解析逻辑,但针对当前场景,该方案完全适用。

内容的提问来源于stack exchange,提问作者deadpoint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:10:08