Невозможно получить сервлет для обработки содержимого запроса как UTF-8

Я преобразовываю устаревшее приложение из ISO-8859-1 в UTF-8, и я использовал ряд ресурсов, чтобы определить, что мне нужно установить, чтобы заставить это работать. Однако после нескольких изменений конфигурации, кода и среды мой сервлет (в Tomcat 5), по-видимому, не обрабатывает отправленное содержимое HTML-формы как UTF-8.

Вот то, что я настроил для конфигурации.

System properties
[user@server ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
tomcat5 server.xml
<Connector protocol="HTTP/1.1"
    ...
    URIEncoding="UTF-8"
    useBodyEncodingForURI="true"/>
JSP file
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
...
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
Servlet filter
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
{
    if(request.getCharacterEncoding() == null)
    {
        request.setCharacterEncoding("UTF-8");
    }
    ...

С некоторыми журналами отладки я знаю следующее:

System.getProperty("file.encoding"): "UTF-8"
java.nio.charset.Charset.defaultCharset(): "UTF-8"
new OutputStreamWriter(new ByteArrayOutputStream()).getEncoding(): "UTF8"

Однако, когда я отправляю свою форму с вводом, содержащим & quot; & # x411; & # x438; & # x442; & # x44C; & # x431; & # x430; & # x43A; & # x43B; & # x443; & # x448; & # x438; & quot ;, я вижу следующее (из моих журналов):

request.getParameter("myParameter") = Ð\221иÑ\202Ñ\214 баклÑ\203Ñ\210Ð

Я знаю, что тип содержимого запроса былnullтаким образом, он был явно установлен на «UTF-8» в моем фильтре сервлетов. Кроме того, я просматриваю свои журналы с терминала, кодировка которого, как мне известно, также установлена на UTF-8.

Что мне здесь не хватает?What else do I need to set for the Servlet to correctly process my input as UTF-8? Если больше информации поможет, я буду рад добавить дополнительную отладку и дополнить этот вопрос.

Edit:

I'm not using Windows Terminal (I'm using PuTTY), so I'm pretty certain the problem is not what I'm viewing the logs with. This is seconded by the fact that when I send my response back to the browser with the submitted content and output it, it's the same garbage as above. The form's being submitted from IE8. Solution:

мойweb.xml Определение моего CharsetFilter было слишком далеко внизу (ниже настроек моего сервлета и других фильтров). Я переместил определение фильтра в самый верх документа web.xml, и все заработало правильно. Смотрите принятый ответ ниже.

Ответы на вопрос(2)

Ваш ответ на вопрос