HttpServletResponse не может установить кодировку - PullRequest
0 голосов
/ 05 марта 2020

У меня проблема с настройкой кодировки для файла CSV, который я создаю в своем веб-приложении (тестирование на ноутбуке windows на сервере Tomcat9). Вот что я делаю:

byte[] data = result.toString().getBytes();
ByteArrayOutputStream outStream = new ByteArrayOutputStream(data.length);
outStream.write(data, 0, data.length);
response.setContentType("text/csv;charset=UTF-8");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"AEP_report.csv\"");
response.setContentLength(outStream.size());
ServletOutputStream responseOutStream = response.getOutputStream();
outStream.writeTo(responseOutStream);
outStream.flush();
outStream.close();
responseOutStream.flush();
responseOutStream.close();

Я пытался изменить кодировку на windows-1252 и другие. Конечно, у меня нет проблем с генерацией файла, но когда потом я go записываю в блокнот ++ и меняю кодировку, чтобы посмотреть, работает ли он, я всегда получаю один и тот же результат. Для ANSI все выглядит хорошо, но когда я перехожу на UTF-8, это то, что он показывает:

wrong encoding

, когда должно отображаться "Cürey".

Так что, очевидно, файл всегда создается в ANSI.

Тогда возникает моя настоящая проблема, но в основном она такая же, как и раньше. В моей системе качества (на сервере Linux) это похоже, код не влияет на кодировку, но, очевидно, там файл всегда создается с кодировкой UTF-8. Я думаю, это зависит от операционной системы. Поэтому я думаю, что моя ошибка заключается в определении типа контента. Я сделал какую-то ошибку в определении?

Заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 марта 2020

Итак, после выполнения некоторого теста я понял, что проблема в том, что для такого контента (String, который генерируется как ByteArrayOutputStream) момент, когда определяется кодировка, - это когда вы выполняете это преобразование.

Так что просто добавьте кодировку в качестве параметра метода в первой строке кода.

result.toString().getBytes("UTF-8");

тогда вам не нужно снова определять кодировку на

response.setContentType("text/csv")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...