首页 > 解决方案 > 带逗号的 OpenCSV 字段

问题描述

我正在创建一个 csv,其中字段可能包含逗号。在java中,写作是用opencsv完成的。

try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {

      CSVWriter csvWriter =
          new CSVWriter(
              fileWriter,
              ICSVWriter.DEFAULT_SEPARATOR,
              ICSVWriter.NO_QUOTE_CHARACTER,
              ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
              ICSVWriter.DEFAULT_LINE_END);
      csvWriter.writeNext(headers);
      csvWriter.writeAll(rows);
    } catch (IOException e) {
      throw new IOException(e);
    }

所以像["field, 1", "field, 2", "field, 3"]我期望得到一个专栏一样,"field, 1", "field, 2", "field, 3"但我得到了field", 1,field", 2,field", 3

实际上,在 excel 中打开时逗号消失了,并且预期不会显示引号。我在 opencsv 上没有看到任何文档。

标签: javaopencsv

解决方案


一切看起来都不错,除了ICSVWriter.NO_QUOTE_CHARACTER. 通过NO_QUOTE_CHARACTER作为参数传递,您要求 OpenCSV 将引号视为文件中的常规文本,这就是它正在做的事情。

如果您确信双引号将成为您的引号字符,则可以将其更改为ICSVWriter.DEFAULT_QUOTE_CHARACTER

最后,您的代码段如下所示:

try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {

  CSVWriter csvWriter =
      new CSVWriter(
          fileWriter,
          ICSVWriter.DEFAULT_SEPARATOR,
          ICSVWriter.DEFAULT_QUOTE_CHARACTER,
          ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
          ICSVWriter.DEFAULT_LINE_END);
  csvWriter.writeNext(headers);
  csvWriter.writeAll(rows);
} catch (IOException e) {
  throw new IOException(e);
}

推荐阅读