我想从请求中获取我的参数(带有重音的字符),但是不起作用。我尝试使用 request.setCharacterEncoding("UTF-8")
,但也没有起作用。
我知道 URLDecoder.decode(request.getQueryString(), "UTF-8")
返回正确的字符,但是 request.getParameterValues()
不起作用!
有人有想法吗?
我想从请求中获取我的参数(带有重音的字符),但是不起作用。我尝试使用 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编码。
request.setCharacterEncoding("UTF-8")
仅适用于POST
请求。GET
请求,您需要在<Connector>
中添加URIEncoding="UTF-8"
到server.xml
文件中。client.encoding.override
。请参见https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/help/trun_svr_utf.html。 - Paul Vargas我找到了解决我的问题的方法,虽然不是最好的解决方案,但它确实有效。
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