Issue
I home some problems with encoding of data in JSP page (I'm using a Spring-MVC). It looks like this:
<%@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>
........
My app takes a text from input text box and write it to the database (HSQLDB). When I'm using english letters to write data, it all works fine! But when I'm trying to use russian letters in input text box, it write some strange letters in incorrect encoding form. How to avoid this problem?
Any ideas?
Solution
You need to configure character encoding filter in 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>
Servlet container treats POST request data as ISO-8859-1 if request encoding is not specifed, whereas browser submits the form in the page encoding (UTF-8 in your case) and unsually doesn't specify the encoding, therefore you need a filter to specify the proper request encoding.
EDIT: As correctly mentioned by BalusC, it doesn't cover encoding problems with GET requests. To fix that on Tomcat you need to set URIEncoding="UTF-8"
on <Connector>
in conf/server.xml
.
Answered By - axtavt
Answer Checked By - David Goodson (JavaFixing Volunteer)