HttpServletRequest UTF-8 编码

2022-09-01 04:58:37

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

我知道这会返回正确的字符,但不起作用!URLDecoder.decode(request.getQueryString(), "UTF-8")request.getParameterValues()

有人有想法吗?


答案 1

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编码。


答案 2

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

如有要求,您需要在 中添加您的 .GETURIEncoding="UTF-8"<Connector>server.xml

有关详细信息,请参阅FAQ/CharacterEncoding - Apache Tomcat wiki space


推荐