我使用intellij idea和tomcat 8,这是我的过滤器:
@WebFilter(urlPatterns = { "/*" }, initParams = {@WebInitParam(name = "encoding", value = "UTF-8", description = "Encoding Param") })
public class EncodingFilter implements Filter {
private String code;
public void init(FilterConfig filterConfig) throws ServletException {
code = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String codeRequest = servletRequest.getCharacterEncoding();
if (code != null && !code.equalsIgnoreCase(codeRequest)) {
servletRequest.setCharacterEncoding(code);
servletResponse.setCharacterEncoding(code);
}
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy() {
code = null;
}
}
我不明白为什么,但它不起作用,当我把英语单词用来表示没问题时,但是当我把俄语字母形成时,这就是它的样子:
String address = request.getParameter(PARAM_NAME_ADDRESS);
//**address : ЮзеÑова 12 144**
我在jsp中有这个:
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
可能是什么问题?
答案 0 :(得分:0)
您需要在页面上设置编码:
<head>
<meta charset="UTF-8">
</head>
以及表单元素中的(完整性):
<form action="..." accept-charset="UTF-8">
答案 1 :(得分:0)
This question帮助了我
问题在于听众,我将其删除了
@WebListener
public class RequestListener implements ServletRequestListener {
private final static Logger LOG = Logger.getLogger(RequestListener.class);
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
String command = servletRequestEvent.getServletRequest().getParameter("command");
HttpServletRequest request = (HttpServletRequest)servletRequestEvent.getServletRequest();
LOG.info("Request initialized. Command: " + command + " " + request.getContextPath());
}
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
String command = servletRequestEvent.getServletRequest().getParameter("command");
LOG.info("Request destroyed. Command: " + command);
}
}