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

使用univocity-parsers解析含反斜杠转义引号的CSV遇解析异常

问题

使用univocity-parsers解析带反斜杠转义引号(\")的CSV文件时,仅含单个转义引号的行能正常解析,包含两个转义引号的行解析异常。

CSV示例(每行4列)

1,,No quote escape,test
2,,"One quote escape\"",test
3,,"Two \"quote escapes\"",test
4,,"Two \"quote escapes\" 2",test

当前解析器配置

CsvFormat:
        Comment character=#
        Field delimiter=,
        Line separator (normalized)=\n
        Line separator sequence=\r

        Quote character="
        Quote escape character=\\
        Quote escape escape character=null

现有代码片段

CsvParserSettings settings = new CsvParserSettings();

settings.setDelimiterDetectionEnabled(true);
settings.setLineSeparatorDetectionEnabled(true);
settings.getFormat().setQuote('"');
settings.getFormat().setQuoteEscape('\\\\');

CsvParser parser = new CsvParser(settings);

parser.beginParsing(file, StandardCharsets.UTF_8);
...

期望解析结果

  • 1,null,No quote escape,test
  • 2,null,One quote escape",test
  • 3,null,Two "quote escapes",test
  • 4,null,Two "quote escapes" 2,test

解决方案

问题根源在于转义字符的设置错误,以及未启用Quote escape escape character配置。

修正后的代码

CsvParserSettings settings = new CsvParserSettings();

settings.setDelimiterDetectionEnabled(true);
settings.setLineSeparatorDetectionEnabled(true);

CsvFormat format = settings.getFormat();
format.setQuote('"');
format.setQuoteEscape('\\'); // Java中单个反斜杠需用\\转义,此处设置转义字符为\
format.setQuoteEscapeEscape('\\'); // 关键配置:让解析器正确识别连续的转义引号序列

CsvParser parser = new CsvParser(settings);
parser.beginParsing(file, StandardCharsets.UTF_8);

配置说明

  1. 修正Quote escape character:原代码中setQuoteEscape('\\\\')会导致解析器把\\\\当作转义字符,实际应设置为'\\',对应CSV中的\作为引号转义符。
  2. 启用Quote escape escape character:将其设置为和转义字符相同的'\\',解析器就能正确处理\"\"这类连续转义序列,将其转换为两个普通引号,而非误判为字段结束符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:10:51