OpenCSV无法解析彼此相邻的双引号

daz*_*ito 5 java csv parsing opencsv

我已经将OpenCSV版本从1.8升级到4.1。

对于4.1版,OpenCSV无法解析以下行:

MODIFY  ACEUD-2052  TVG00420    8806088726823   0   645.88      TV Gerät LED-LCD 140 cm (55) Samsung UE55MU6402 (1500Hz,SmartTV,4K) USB-Recording   645.88  EUR     "{""rawArticleType"":""TV Geräte/139 cm (55\"")/LCD""}"
MODIFY  ACEUD-2052  TVG00515    8806088692401   0   2397.73     TV Gerät LED-LCD 190 cm (75) Samsung UE75MU8002 (2600Hz,SmartTV,4K) USB-Recording   2397.73 EUR     "{""rawArticleType"":""TV Geräte/190 cm (75\"")/LCD""}"
MODIFY  ACEUD-2052  VG001183    4719331339302   0   103.30      VGA 2GB GIGABYTE GeForce GTX1050 D5 2G (HDMI,DP,DVI)    103.30  EUR     "{""rawArticleType"":""Grafikkarten/PCI-Express/NVIDIA""}"
Run Code Online (Sandbox Code Playgroud)

我相信问题出在json 的(75 \“”)部分。

OpenCSV失败,但以下情况除外:

java.lang.RuntimeException:java.lang.RuntimeException:java.io.IOException:CSV行末的带引号的未终止字段。丢失的文本的开头:[{“ rawArticleType”:“ TVGeräte/ 190厘米(75英寸)/ LCD”}修改ACEUD-2052 VG001183 4719331339302 0 103.3 ...]

版本1.8成功处理了相同的字符串

这是构建解析器和阅读器的代码

csvParser = new CSVParserBuilder()
    .withSeparator((char) (int) separatorChar)
    .withQuoteChar((char) (int) quoteChar)
    .build();

csvReader = new CSVReaderBuilder(inputStreamReader)
    .withCSVParser(csvParser)
    .build();
Run Code Online (Sandbox Code Playgroud)

其中separatorChar是TAB(int值9)和quoteChar是'“',报价炭,(int值34)

上面的代码在1.8版上运行良好,但在4.1版上运行失败

在4.1版上,我看到有一个CSVParserBuilder()#withIgnoreQuotations(boolean value)OpenCSV4.1-Javadoc链接

如果我将其设置为true,那么将无例外地处理行,但是输出是{"rawArticleType":"Displays/60 - 61 cm (24""")/WUXGA (1920x1200)"}无效的json,下游的json解析器将跳过该输出,这使该解决方案不可接受。

我也尝试将转义字符设置为"(单引号),但随后OpenCSV引发了异常投诉

java.lang.UnsupportedOperationException:分隔符,引号和转义符必须不同!

再次,我的问题是我在解析这些字符串并输出有效的json时做错了什么?

编辑:

我正在使用读取CSV文件 csvReader.readNext()