我有一个过滤器,我在获取未设置编码的参数后设置request.setCharacterEncoding(" UTF-8")。在流程方法中,我只是检查请求是否包含任何被删除的特殊字符。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
getParams(request);
chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
}
private void getParams(ServletRequest request)
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
Map paramMap = httpRequest.getParameterMap();
Set entrySet = paramMap.entrySet();
for (Iterator iterator = entrySet.iterator(); iterator.hasNext();)
{
Map.Entry entry = (Map.Entry) iterator.next();
String s = process(entry.getValue().toString());
//entry.setValue(s);
}
}
在给定代码中,我在链中的下一个过滤器中设置了CharacterEncoding。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
但是,如果我在第一个过滤器中设置参数之前将其设置为正常工作。
因此有必要在获取参数之前设置CharacterEncoding。我不清楚事情是如何运作的。
答案 0 :(得分:0)
默认情况下,如果未在HTTP请求中指定编码,则服务器会认为编码为ISO-8859-1(拉丁语1)。至少对于将Tomcat嵌入Web容器的Tomcat和JBoss来说就是这种情况。
如果在检索请求参数之前调用setCharacterEncoding
方法,则会覆盖此默认行为,以使其按预期工作。
相反,如果在检索请求参数后调用setCharacterEncoding方法,则将使用默认的ISO-8859-1编码检索它们。接下来你覆盖它,但为时已晚。
有关在webapps中使用UTF-8编码的详细信息,请参阅此帖子:How to get UTF-8 working in Java webapps?