HttpServletRequest的UTF-8编码[重复](HttpServletRequest

2019-09-02 22:38发布

这个问题已经在这里有一个答案:

  • 如何通过Unicode字符作为JSP / Servlet的用request.getParameter? 4个回答

我看到了很多像我这样的问题,但不是一个单一的答案工程...事情是这样的:我想从该请求获得我的参数(重音符号的字符),但它不工作。 我试着用户request.setCharacterEncoding( "UTF-8" )但它也不能工作。

我知道URLDecoder.decode( request.getQueryString(), "UTF-8" )返回我的权利字符,但request.getParameterValues()不工作! 有没有人有一个想法?

谢谢

Answer 1:

保罗的建议似乎是最佳行动过程,但如果你要解决它,你并不需要的URLEncoder或URLDecoder都:

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");

更新:由于这是获得了很多票,我想强调BalusC的观点,这绝对不是一个解决办法; 这是一个解决办法的最好的。 人们不应该这样做。

我不知道到底是什么原因导致了原来的问题,但我怀疑的URL已经UTF-8编码,然后是UTF-8编码再次。



Answer 2:

如果您在使用Apache Tomcat, request.setCharacterEncoding("UTF-8")只适用于POST请求。

对于GET请求,您需要添加URIEncoding="UTF-8"在你的<Connector>server.xml

查看更多在FAQ /和characterEncoding - Tomcat的维基



Answer 3:

嗯,我找到了一种方法来解决我的问题,我想这是不是更好的解决方案,但它确实工作..

  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

如果它可以帮助别人,我很高兴帮助:)

PS:保罗,我没有回答你前面,但我已经做了那些事。 不管怎样,谢谢您的帮助。



文章来源: HttpServletRequest UTF-8 Encoding [duplicate]