使用 ICsvListWriter 时,上标字符会导致生成的 CSV 文件中出现垃圾字符
Superscript characters are resulting in to junk characters in generated CSV file when using ICsvListWriter
我正在尝试在 .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"));
有什么建议吗?
已找到解决此问题的方法。创建 ICsvListWriter 对象时需要更正。以前我有这段代码,其中 'response' 是 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,此修复程序都有效。
我正在尝试在 .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"));
有什么建议吗?
已找到解决此问题的方法。创建 ICsvListWriter 对象时需要更正。以前我有这段代码,其中 'response' 是 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,此修复程序都有效。