java - Apache 通用 CSV 格式化程序 : IOException: invalid char between encapsulated token and delimiter

标签 java csv apache-commons opencsv apache-commons-csv

我正在尝试使用 JakartaCommons-csv 解析 CSV 文件

示例输入文件

Field1,Field2,Field3,Field4,Field5
"Ryan, R"u"bianes","  dummy@gmail.com","29445","626","South delhi, Rohini 122001"

格式化程序:CSVFormat.newFormat(',').withIgnoreEmptyLines().withQuote('"') CSV_DELIMITER 是 ,

输出

  1. CSV 解析后的 Field1 值应为:Ryan, R"u"bianes
  2. CSV 解析后的 Field5 值应为:South delhi, Rohini 122001

异常: Caused by: java.io.IOException: (line 2) invalid char between encapsulated token and delimiter

最佳答案

问题是您的文件未遵循 CSV 文件中公认的引用标准。在带引号的字符串中表示引号的正确方法是重复引号。例如。

Field1,Field2,Field3,Field4,Field5
"Ryan, R""u""bianes","  dummy@gmail.com","29445","626","South delhi, Rohini 122001"

如果您限制自己使用 CSV 引用的标准形式,Apache Commons CSV 解析器应该可以工作。

不幸的是,为您的变体格式编写一致的解析器是不可行的,因为如果您需要表示包含“Ryan R”,"baines< 的字段,则无法消除嵌入式逗号和字段分隔符的歧义”。

在 CSV 文件中引用的规则在各个地方都有规定,包括 RFC 4180 .

关于java - Apache 通用 CSV 格式化程序 : IOException: invalid char between encapsulated token and delimiter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50423910/

相关文章:

java - 在java中将unix时间戳转换为日期

java - 关于 Android 上存储的快速问题

mysql - 使用单个查询从 mysql 表中删除 csv 文件值

python - 在Python中将行添加到按ID排序的CSV中,而不将整个文件读入内存

java - 如何通过使用 OpenCsv 记录无效记录的错误来创建有效 CSV 记录的列表?

java - GWT 模块继承并且应用程序运行时没有可用的源代码

Python - 如何保存具有不同文件名的CSV文件?

java - 如何将 double 组转换为集合?

java - 将 java Map 转换为自定义 key=value 字符串

java - 如何使用 Java 下载 WordPress