How to set request encoding in Tomcat?
24-07-2015The request.setCharacterEncoding("UTF-8");
only sets the encoding of the request body (which is been used by POST requests), not the encoding of the request URI (which is been used by GET requests).
You need to set the URIEncoding
attribute to UTF-8
in the <Connector>
element of Tomcat's /conf/server.xml
to get Tomcat to parse the request URI (and the query string) as UTF-8. This indeed defaults to ISO-8859-1. See also the Tomcat HTTP Connector Documentation.
<Connector ... URIEncoding="UTF-8">
See also:
Unicode - How to get the characters right? - JSP/Servlet request
Please get rid of those scriptlets in your JSP. The request.setCharacterEncoding("UTF-8");
is called at the wrong moment. It would be too late whenever you've properly used a Servlet to process the request. You'd rather like to use a filter for this. The response.setCharacterEncoding("UTF-8");
part is already implicitly done by pageEncoding="UTF-8"
in top of JSP.
I also strongly recommend to replace the old fashioned <%= request.getParameter("q") %>
scriptlet by EL ${param.q},
or with JSTL XML escaping ${fn:escapeXml(param.q)}
to prevent XSS attacks.