IT • archiv

rus / eng | Логин | Создать пользователя | Почта | Клуб


IT • archiv forums > Java Forums > Server-side Java


Обсуждение

Topic: Русская кодировка в сервлетах Tomcat

Replies: 1   Pages: 1   Last Post: 25.06.2012 14:43 by: leah



Go Back Back to Topic List
Replies: 1
stalker321

Posts: 1
Registered: 24.06.12
Русская кодировка в сервлетах Tomcat

Posted: 24.06.2012 10:58
  Click to reply to this topic Reply

Работаю в Eclipse 3.7.2 под Tomcat 7.0.25
Вот сервлет:

public class EncodingTest extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setCharacterEncoding ("utf-8");
PrintWriter out = res.getWriter ();
out.println ("<html><body>");
out.println ("Русский Текст...");
out.println ("</body></html>");
}
}

Я ничего не могу понять с выводом русского текста...
У получающегося HTML стоит правильная кодировка (utf-8)
Однако, на экране сплошные ? и/или !

При этом:
1. Сам файл набран тоже в utf-8
2. res.setContentType("text/html; charset=utf-8"); - не помогает
3. res.setCharacterEncoding("utf-8"); - не помогает
4. META-тег с charset - аналогично

Помогите, кто чем может!



leah

Posts: 1 284
From: Zelenograd
Registered: 05.06.03
Re: Русская кодировка в сервлетах Tomcat

Posted: 25.06.2012 14:43
  Click to reply to this topic Reply

http://www.javable.com/forum/thread.jspa?forumID=17&threadID=16789&messageID=78143#78143

1) Задача действительно тривиальна (см сразу пункт 6!)
2) Нужно использовать фильтр, request.setCharacterEncoding() или как я написал конкретно для томката.
3) request.setCharacterEncoding() нужно вызывать ДО ЛЮБОЙ записи в выходной поток, поэтому часто его не следует вызывать из JSP!
4) нужно правильно установить кодировку ответа сервлета либо html-тегом <meta>, или, что существенно лучше, соответствующим http-заголовком
5) нужно удостовериться, что браузер правильно понял кодировку сервлета. для мозиллы можно установить этот плугин
http://livehttpheaders.mozdev.org/ который показывает какие заголовки призодят
6) в файле web.xml твоего приложения установить заголовок по-умолчанию элементом если контейнер поддерживает Servlets 2.4 (томкат 5.0 и выше)
1
2
3
4
5
6
7
8
9
<web ...>
...
        <locale-encoding-mapping-list>
            <locale-encoding-mapping>
                <locale>ru</locale>
                <encoding>koi8-r</encoding>
            </locale-encoding-mapping>
        </locale-encoding-mapping-list>
</web>



PS. Я использую описание в web.xml и server.xml и никаких фильтров с томкатом 5.0 и выше.

PPS. to phenom: небольшая поправка, забыл указать маппинг фильтра, поэтому у ildar_kh ничего с фильтрами и не случилось.
Нужно так
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<web ...>
...
<filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>server.CharEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF8</param-value>
  </init-param>
</filter>
...
<filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>
...
<web/>





Справка | Условия Copyright © 1999 — 2010, IT • archiv.
Forum Home | Login | Create Account | Help | Search
Powered by Jive Software