Не удается отправить специальные символы (UTF-8) из JSP в сервлет: отображаются знаки вопроса - PullRequest
6 голосов
/ 24 сентября 2011

У меня проблема с отправкой специальных символов, таких как кириллица или умлаутс, из jsp в сервлет.Я был бы очень признателен за вашу помощь.

Вот что я сделал:

  1. Определил кодировку utf-8 в jsp:

    <%@ page language="java" contentType="text/html; charset=utf-8" 
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
     <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
     ...
    
    <div class="authentication">
      <form name="registerForm" action="register" method="get" accept-charset="UTF-8">
        <input type="input" name="newUser" size="17"/>
        <input type="submit" value="senden" />
      </form>
    </div>
     ...
    
  2. Установите кодирование URIEncat Tomcat для Connector в файле server.xml

    <Connector URIEncoding="UTF-8" ...
    
  3. Внутри сервлета - установите кодировку символов в UTF и запрос на чтение

    public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    
    request.setCharacterEncoding("UTF-8");
    String username = request.getParameter("newUser");
    System.out.println("encoding: "+request.getCharacterEncoding());
    
    System.out.println("received: "+username);
    
  4. Вот что отображается при использовании, например: Однако

    encoding: UTF-8
    received: ??????
    

Я что-то упустил?Я полагаю, что сервлет не может правильно декодировать строку, но я понятия не имею, почему это происходит.Я следовал всем советам на эту тему, но не повезло.

заранее спасибо.

1 Ответ

9 голосов
/ 24 сентября 2011

Все выглядит хорошо. Только консоль System.out.println() также должна быть настроена для интерпретации потока байтов как UTF-8.

Если вы сидите в IDE, такой как Eclipse, вы можете сделать это, установив Окно> Параметры> Общие> Рабочая область> Кодировка текстового файла в UTF-8. Для других сред вы должны быть более конкретны в этом вопросе, чтобы мы могли рассказать, как его настроить.

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