使用 OpenCSV 写入 CSV 文件时双引号重复

Double Quotes getting duplicated while writing CSV file with OpenCSV

我正在尝试使用 OpenCSV 库编写一个简单的 CSVWriter 代码,但遇到了一个奇怪的问题。

Code:

public class Test {

    public static void main(String[] args) throws IOException {

       String[] header = {"ONE", "\"TWO\"", "\"THREE\"", "\"FOUR\""};

       CSVWriter writer = new CSVWriter(new FileWriter("C:/test.csv"), '|', CSVWriter.NO_QUOTE_CHARACTER);

       writer.writeNext(header);

       writer.flush();       
       writer.close();
    }
}

Expected Output:

ONE|"TWO"|"THREE"|"FOUR"

Real Output:

ONE|""TWO""|""THREE""|""FOUR""

正如我们所见,两个、三个和四个周围有双引号,但在输出中双引号是 重复的

我不想要这个,已经尝试了 CSVWriter class 的几个选项和构造函数,但无法解决这个问题。

有人遇到过类似的问题或知道解决办法吗?

谢谢

成功了,下面的构造函数成功了:

CSVWriter writer = new CSVWriter(new FileWriter("C:/test.csv"), '|', CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER);

我看到 CSVWriter 默认将 " 视为 转义字符 的原因,因此如果它出现在字符串中,它将尝试DEFAULT_ESCAPE_CHARACTER 转义 " ,这只是 " 本身。

通过传递 CSVWriter.NO_ESCAPE_CHARACTER,Writer 将无需担心检查 Escapes.

之间是否需要任何内容

如果您正在使用 com.opencsv.bean.StatefulBeanToCsvBuilder 构建的 com.opencsv.bean.StatefulBeanToCsv 而不是 com.opencsv.CSVWriter;

不能直接将选项设置为构造函数参数,但你必须调用相应的方法来设置它:.withQuotechar().withEscapechar()

像这样:

StatefulBeanToCsvBuilder btcsvBuilder = new StatefulBeanToCsvBuilder(myOutputStreamWriter);
StatefulBeanToCsv btcsv = btcsvBuilder.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).withEscapechar(CSVWriter.NO_ESCAPE_CHARACTER).withMappingStrategy(myMapStrategy).withSeparator(',').build();