HttpServletRequest UTF-8 Encoding [duplicate]

2019-01-06 12:47发布

This question already has an answer here:

I saw a lot of question like mine but not a single answer works... Here's the thing : 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 me the rights characters but request.getParameterValues() doesn't work ! Does anyone have an idea ?

Thank you

3条回答
贼婆χ
2楼-- · 2019-01-06 13:23

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.

查看更多
Deceive 欺骗
3楼-- · 2019-01-06 13:31

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.

查看更多
在下西门庆
4楼-- · 2019-01-06 13:37

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 - Tomcat Wiki.

查看更多
登录 后发表回答