Java HttpServletRequest UTF-8编码

Java HttpServletRequest UTF-8编码,java,encoding,utf-8,httprequest,Java,Encoding,Utf 8,Httprequest,我想从请求中获取参数(带有重音的字符),但它不起作用。我尝试使用userrequest.setCharacterEncoding(“UTF-8”),但也没有成功 我知道urldecker.decode(request.getQueryString(),“UTF-8”)返回正确的字符,但是request.getParameterValues()不起作用 有人有主意吗?如果您使用的是ApacheTomcat,请求。setCharacterEncoding(“UTF-8”)仅适用于POST请求 对于G

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

我知道
urldecker.decode(request.getQueryString(),“UTF-8”)
返回正确的字符,但是
request.getParameterValues()
不起作用


有人有主意吗?

如果您使用的是ApacheTomcat,
请求。setCharacterEncoding(“UTF-8”)
仅适用于
POST
请求

对于
GET
请求,您需要在
server.xml
中的
上添加
URIEncoding=“UTF-8”


查看更多信息。

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

  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
如果它能帮助其他人,我很乐意帮助:)


保罗,我之前没有回答你,但我已经做了那些事。无论如何,感谢您的帮助。

保罗的建议似乎是最好的行动方案,但如果您打算解决这个问题,您根本不需要URLEncoder或URLEncoder:

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");
更新:由于这项计划获得了大量选票,我想强调巴卢斯克的观点,即这绝对不是一个解决方案;这充其量只是一种变通办法。人们不应该这样做


我不知道到底是什么导致了最初的问题,但我怀疑URL已经进行了UTF-8编码,然后又进行了UTF-8编码。

对于所有未来的读者,请注意这是一种解决方法,而不是解决方案。事实上,这是一个非常糟糕的问题,它使您的webapp变得脆弱且不可移植。websphereapplicationserver呢?我可以知道server.xml位于中的哪个文件夹吗?我搜索了整个,发现有很多server.xml。对于WebSphere,您需要使用系统属性
client.encoding.override
。请参阅@PaulVargas Hi,您提供的链接现在已失效,返回404。你能帮我更新一下资源吗?谢谢@萨吉巴查里亚你好谢谢你的提醒。显然,某种程度上。但是我们可以看到原始地址。从Paul的回答中,我可以知道server.xml位于中的哪个文件夹吗?我搜索了整个,发现有很多server.xml.xml为我工作过,谢谢。我无法修改Tomcat服务器,因此这是完美的:)