我想从请求中获取我的参数(带重音的字符),但它不起作用。我尝试使用,request.setCharacterEncoding("UTF-8")
但它也没有工作。
我知道URLDecoder.decode(request.getQueryString(), "UTF-8")
返回正确的字符,但request.getParameterValues()
不起作用!
有人有想法吗?
我想从请求中获取我的参数(带重音的字符),但它不起作用。我尝试使用,request.setCharacterEncoding("UTF-8")
但它也没有工作。
我知道URLDecoder.decode(request.getQueryString(), "UTF-8")
返回正确的字符,但request.getParameterValues()
不起作用!
有人有想法吗?
Paul 的建议似乎是最好的做法,但如果您要解决它,则根本不需要 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 编码的。
如果您使用的是 Apache Tomcat,则request.setCharacterEncoding("UTF-8")
仅适用于POST
请求。
对于GET
请求,您需要添加URIEncoding="UTF-8"
您的<Connector>
in server.xml
。
好吧,我找到了解决问题的方法,我想这不是更好的解决方案,但它确实有效..
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:保罗,我之前没有回答你,但我已经做了那些事情。无论如何感谢您的帮助。