I am trying to write superscript characters in .csv file. I am using method write(List<?> columns)
of org.supercsv.io.ICsvListWriter. In generated .csv file the superscript character is coming along with junk character before it.
List columns = new ArrayList();
String myString = "abcd1";
columns.add(myString.replaceAll("1", "¹"));
csvWriter.write(columns);
In the generated .csv file it is coming as
abcd¹
I also tried with unicode but it is not helping.
columns.add(myString.replaceAll("1", "\u00B9"));
Any suggestion here please?
Found a solution for this problem. Correction was needed in creating ICsvListWriter object. Previously I was having this code where 'response' is HttpServletResponse.
CsvPreference preference = new CsvPreference.Builder(CsvPreference.STANDARD_PREFERENCE).useEncoder(new DefaultCsvEncoder()).build();
ICsvListWriter csvWriter = new CsvListWriter(response.getWriter(), preference);
This code is enhanced to this:
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);
This fixed the issue and all of the superscript characters are now coming properly in generated CSV file without any junk characters. No mater whether I use actual superscript characters or their Unicode, this fix works.