java中的opencsv忽略字段值中的反斜杠

时间:2011-05-15 12:34:28

标签: java opencsv

我正在使用opencsv读取csv文件。

我忽略了第一行; csv文件是制表符分隔的,其中一些值用双引号括起来。

当我读取具有'\'字符的列的值时会出现问题,这会从值中删除。

reader = new CSVReader(new FileReader(exchFileObj),'\t','"',1);

例如在原始文件中:

address = 12\91buenosaires   

变为:

address = 1291buenosiares

csvreader 生成的字符串数组中。如何修改它以便能够读取'\'字符?

4 个答案:

答案 0 :(得分:22)

我有同样的问题,找不到另一个我保证不会出现在我的csv文件中的角色。根据sourceforge上的一篇文章,您可以使用带有'\ 0'的显式构造函数来指示您不需要任何转义字符。

http://sourceforge.net/tracker/?func=detail&aid=2983890&group_id=148905&atid=773542

CSVParser parser = new CSVParser(CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);

我做了一些粗略的测试,这似乎工作得很好,至少反斜杠肯定能够通过。

答案 1 :(得分:3)

CSVReader还有constructor,您可以通过它设置要使用的转义字符。如果你使用它并将转义字符设置为你不使用的东西,你将在输入中得到反斜杠字符。

答案 2 :(得分:1)

除了@JMM的答案之外,您还必须在CSVReader的构造函数中使用此创建的CSVParser。唯一可用的构造函数是:

public CSVReader(Reader reader, int line, CSVParser csvParser)

您可以将该行设置为0,以便它不会跳过任何内容

答案 3 :(得分:0)

默认情况下,OpenCSV的阅读器与编写器不兼容,从而导致反斜杠问题。阅读器不符合RFC。不要问我为什么会这样,因为我发现它像您一样令人困扰和困惑。

该解决方案是让您使用兼容RFC的解析器配置CSVReader:

RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReaderBuilder csvReaderBuilder =
  new CSVReaderBuilder(new StringReader(writer.toString()))
      .withCSVParser(rfc4180Parser);
reader = csvReaderBuilder.build();

Here is the source page for the above.

这里涉及更改转义字符的其他答案似乎只是黑客。