HttpServletRequest UTF-8 Encoding [duplicate]

I want to get my parameters from the request (characters with accents) but it doesn't work. I tried to user request.setCharacterEncoding("UTF-8") but it didn't work either.

I know that URLDecoder.decode(request.getQueryString(), "UTF-8") returns the right characters, but request.getParameterValues() doesn't work!

Does anyone have an idea?


Paul's suggestion seems like the best course of action, but if you're going to work around it, you don't need URLEncoder or URLDecoder at all:

String item = request.getParameter("param"); 

byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1);
item = new String(bytes, StandardCharsets.UTF_8);

// Java 6:
// byte[] bytes = item.getBytes("ISO-8859-1");
// item = new String(bytes, "UTF-8");

Update: Since this is getting a lot of votes, I want to stress BalusC's point that this definitely is not a solution; it is a workaround at best. People should not be doing this.

I don't know exactly what caused the original issue, but I suspect the URL was already UTF-8 encoded, and then was UTF-8 encoded again.


If you are using Apache Tomcat, request.setCharacterEncoding("UTF-8") only works with POST request.

For GET request, you need add URIEncoding="UTF-8" on your <Connector> in server.xml.

See more in FAQ/CharacterEncoding - Apache Tomcat wiki space.


Well, I found a way to resolve my problem, I guess that's not the better solution, but it does works..

  String item = request.getParameterValues("param"); // Hélène
  item = URLEncoder.encode( model.getNameItem(), "ISO-8859-1" ); // H%C3%A9l%C3%A8ne
  item = URLDecoder.decode( item, "UTF-8" ); // and finally : Hélène

If it can help anyone else, I'm glad to help :)

PS : Paul, I didn't answer you earlier but I already did those things. Thanks anyway for your help.