[英]Double Quotes getting duplicated while writing CSV file with OpenCSV
我正在尝试使用OpenCSV
库编写一个简单的CSVWriter
代码,但遇到了一个奇怪的问题。
代码:
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();
}
}
预期输出:
ONE|"TWO"|"THREE"|"FOUR"
实际输出:
ONE|""TWO""|""THREE""|""FOUR""
正如我们所看到的,TWO、THREE 和 FOUR 周围有双引号,但在输出中,双引号是重复的。
我不想要这个,已经尝试了CSVWriter
类的几个选项和构造函数,但CSVWriter
这个问题。
任何人都遇到过类似的问题或知道出路吗?
谢谢
得到它的工作,下面的构造函数工作:
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.StatefulBeanToCsv
建造由com.opencsv.bean.StatefulBeanToCsvBuilder
代替com.opencsv.CSVWriter
;
您不能直接将选项设置为构造函数 params ,但您必须调用相应的方法来设置它: .withQuotechar()
和.withEscapechar()
像这样:
StatefulBeanToCsvBuilder btcsvBuilder = new StatefulBeanToCsvBuilder(myOutputStreamWriter);
StatefulBeanToCsv btcsv = btcsvBuilder.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER).withEscapechar(CSVWriter.NO_ESCAPE_CHARACTER).withMappingStrategy(myMapStrategy).withSeparator(',').build();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.