使用ICsvListWriter时,上标字符会导致生成的CSV文件中的垃圾字符

时间:2018-05-16 14:32:03

标签: csv special-characters superscript supercsv unicode-escapes

我正在尝试在.csv文件中写上标字符。我正在使用org.supercsv.io.ICsvListWriter的方法write(List<?> columns)。在生成的.csv文件中,上标字符与之前的垃圾字符一起出现。

List columns = new ArrayList();
String myString = "abcd1";
columns.add(myString.replaceAll("1", "¹"));
csvWriter.write(columns);

在生成的.csv文件中,它将显示为

abcd¹

我也尝试使用unicode,但它没有帮助。

columns.add(myString.replaceAll("1", "\u00B9"));

请问这里有什么建议吗?

1 个答案:

答案 0 :(得分:0)

找到解决此问题的方法。在创建ICsvListWriter对象时需要进行更正。以前我有这个代码在哪里回复&#39;是HttpServletResponse。

CsvPreference preference = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useEncoder(new DefaultCsvEncoder()).build();
ICsvListWriter csvWriter = new CsvListWriter(response.getWriter(), preference);

此代码已增强至:

        ServletOutputStream output = response.getOutputStream();
        output.write(new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF });
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
        CsvPreference preference = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useEncoder(new DefaultCsvEncoder()).build();
        ICsvListWriter csvWriter = new CsvListWriter(writer, preference);

这解决了问题,现在所有的上标字符都在生成的CSV文件中正确显示,没有任何垃圾字符。无论我是否使用实际的上标字符或其Unicode,此修复程序都有效。

相关问题