我使用superCSV为bean数据导出为CSV文件。 我想引用的每一个细胞双,不仅仅是特殊字符的人。
现在,使用CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE,即使有特殊字符的细胞不会得到报价。 (随着EXCEL_PREFERENCE设置包含地址“”获得报价为准。)
我的目标是出口地址,电话号码,一切的方式,微软Office(匈牙利),可以使用和电话号码,即不会像转换到360亿360亿。
我使用superCSV为bean数据导出为CSV文件。 我想引用的每一个细胞双,不仅仅是特殊字符的人。
现在,使用CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE,即使有特殊字符的细胞不会得到报价。 (随着EXCEL_PREFERENCE设置包含地址“”获得报价为准。)
我的目标是出口地址,电话号码,一切的方式,微软Office(匈牙利),可以使用和电话号码,即不会像转换到360亿360亿。
编辑:更新超级CSV 2.1.0
由于超级CSV 2.1.0,现在你可以指定一个QuoteMode
通过喜好正在通常不需要时,使报价。 引用每一列,您可以使用内置的AlwaysQuoteMode
。 如果想启用特定列的报价,使用ColumnQuoteMode
。 请注意,您无法禁用引用这样一来,你就必须提供自己的CsvEncoder
做到这一点。
感谢您将是论坛的帖子引起我的注意! 看起来卡斯帕没有得到解决,以实现该功能。 我会看看我能为即将到来的版本做:)
相反黑客超级CSV源添加这个“报价一切”的功能,你可以扩展自己的项目超级CSV实现。 正如你所提到的,超级CSV只引用了整场,如果它包含特殊字符(引号,顿号,等等) - 这也做,如果该字段包含前/后间隔。
考虑到这一点,没有理由你不能写自己的Writer
,其覆盖escapeString()
方法(你只需要确保它没有引用)。
package org.supercsv.io;
import java.io.Writer;
import org.supercsv.prefs.CsvPreference;
public class QuoteAllCsvBeanWriter extends CsvBeanWriter {
public QuoteAllCsvBeanWriter(Writer writer, CsvPreference preference) {
super(writer, preference);
}
@Override
protected String escapeString(String csvElement) {
// perform normal escaping
final String escaped = super.escapeString(csvElement);
// add surrounding quotes if required
final String quote = String.valueOf((char) preference.getQuoteChar());
if (escaped.startsWith(quote) && escaped.endsWith(quote)){
return escaped;
} else {
return quote + escaped + quote;
}
}
}