使用 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();
我正在尝试使用 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();