这个问题已经在这里有一个答案:
- 如何通过Unicode字符作为JSP / Servlet的用request.getParameter? 4个回答
我看到了很多像我这样的问题,但不是一个单一的答案工程...事情是这样的:我想从该请求获得我的参数(重音符号的字符),但它不工作。 我试着用户request.setCharacterEncoding( "UTF-8" )
但它也不能工作。
我知道URLDecoder.decode( request.getQueryString(), "UTF-8" )
返回我的权利字符,但request.getParameterValues()
不工作! 有没有人有一个想法?
谢谢
保罗的建议似乎是最佳行动过程,但如果你要解决它,你并不需要的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>
在server.xml
。
查看更多在FAQ /和characterEncoding - Tomcat的维基 。
嗯,我找到了一种方法来解决我的问题,我想这是不是更好的解决方案,但它确实工作..
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:保罗,我没有回答你前面,但我已经做了那些事。 不管怎样,谢谢您的帮助。