Неправильная кодировка с использованием метода POST из jsp в jsp на сервере Tomcat - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время я изучаю JEE, и в рамках упражнения мне просто нужно отправить текстовые данные из файла .jsp в другой, используя базовую форму с методом POST.В этой форме я хочу иметь возможность использовать акцентированные символы, поэтому я использую <%@page pageEncoding="UTF-8" %> поверх моих файлов jsp, у них также есть и теги <meta charset="utf-8">, и моя IDE (Eclipse) сконфигурирована для кодирования всего в UTF-8.

Проблема в том, что в конце строки, когда я пытаюсь отобразить свои символы, используя EL, акцентированные символы (и другие, которые я предполагаю) кодируются в ISO-8859-1.

Что действительно необычно, так это то, что при отправке данных методом GET у меня вообще не возникает никаких проблем.Тот же результат, когда я передаю строку в запросе через атрибут, заданный в сервлете.

Фактически я уже решил проблему, отправив запрос сервлету и вызвав request.setCharacterEncoding("utf-8") в методе doPost (давайте уточнимэтот вызов request.getCharacterEncoding() до этого дает мне null), но я бы хотел понять, что именно здесь происходит.Я предполагаю, что это происходит из-за неправильной конфигурации сервера, но когда я проверяю файл web.xml конфигурации моего сервера, у меня появляются следующие строки:

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

Моя путаница связана с тем, что никто никогда не говорил мне использоватьrequest.setCharacterEncoding("utf-8"), и что мне не кажется нормальным, что я должен был бы это сделать, поэтому я предполагаю, что вопрос будет: я должен обязательно его использовать?Зачем ?Разве кодировка не должна обрабатываться конфигурацией сервера?

Я использую Tomcat 9 для сервера и работаю под Ubuntu (не знаю, помогает ли это).

1 Ответ

0 голосов
/ 21 ноября 2018

Ответ здесь (спасибо Selaron): http://balusc.omnifaces.org/2009/05/unicode-how-to-get-characters-right.html

Параметры запроса POST для декодирования URL - отдельная история.Предполагается, что веб-браузер должен отправлять кодировку, используемую в заголовке запроса Content-Type.Однако большинство веб-браузеров этого не делают.Эти веб-браузеры будут использовать ту же кодировку символов, что и страница с формой, с которой она была доставлена, то есть это та же кодировка, которая указана в заголовке Content-Type ответа HTTP или тега.

В основномпроблема возникает из навигатора, который должен передать кодировку кодировки, которую он использовал в запросе заголовка, но не делает это.Поскольку Tomcat не предоставляется никакой кодировки для декодирования запроса, он самостоятельно решает сделать это в стиле ISO-8859-1 по умолчанию.И, видимо, вы не можете настроить это!Так что вам просто нужно принудительно указать, что кодировка кодировки была UTF-8.

Я думаю, у парня, который написал лекции, за которыми я следую, был лучший навигатор, потому что он никогда не упоминал об этой проблеме.Во всяком случае, теперь я чувствую себя намного лучше!Большое спасибо!

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