Проблема кодировки страницы JSP - PullRequest
0 голосов
/ 28 ноября 2010

У меня есть некоторые проблемы с кодированием данных на странице JSP (я использую Spring-MVC).Это выглядит так:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%
     response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
     response.setHeader("Pragma", "no-cache"); //HTTP 1.0
     response.setDateHeader("Expires", 0);
     response.setCharacterEncoding("UTF-8");
     request.setCharacterEncoding("UTF-8");
%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

.....
<form method="post">            
        <input type="text" name="txt" value="${Name}" />
        <input type="submit" value= OK /> 
</form>

........

Мое приложение берет текст из текстового поля ввода и записывает его в базу данных (HSQLDB).Когда я использую английские буквы для записи данных, все работает отлично!Но когда я пытаюсь использовать русские буквы в текстовом поле ввода, они пишут странные буквы в неправильной форме кодировки.Как избежать этой проблемы?

Есть идеи?

1 Ответ

5 голосов
/ 28 ноября 2010

Вам необходимо настроить фильтр кодировки символов в web.xml:

<filter>
    <filter-name>charsetEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>charsetEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

РЕДАКТИРОВАТЬ: Как правильно упомянуто BalusC, он не охватывает проблемы кодирования с запросами GET. Чтобы исправить это на Tomcat, вам нужно установить URIEncoding="UTF-8" на <Connector> в conf/server.xml.

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