HttpServletRequest UTF-8编码

时间:2013-05-13 17:17:17

标签: java encoding utf-8 httprequest

我想从请求中获取参数(带重音的字符),但它不起作用。我尝试使用request.setCharacterEncoding( "UTF-8" ),但它也没有用。

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

3 个答案:

答案 0 :(得分:39)

保罗的建议似乎是最好的行动方案,但如果你要解决它,你根本不需要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编码。

答案 1 :(得分:23)

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

对于GET请求,您需要在URIEncoding="UTF-8"的{​​{1}}添加<Connector>

FAQ/CharacterEncoding - Tomcat Wiki中查看更多内容。

答案 2 :(得分:5)

好吧,我找到了解决问题的方法,我想这不是更好的解决方案,但确实有效..

  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:保罗,我没有早点回答你,但我已经做过那些事了。无论如何,谢谢你的帮助。