При использовании ICsvListWriter символы надстрочного знака приводят к ненужным символам в сгенерированном файле CSV - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь написать верхний индекс в файле .csv.Я использую метод write(List<?> columns) org.supercsv.io.ICsvListWriter.В сгенерированном файле .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 голосов
/ 06 июня 2018

Нашел решение для этой проблемы.Исправление было необходимо при создании объекта 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, это исправление работает.

...