从 html ,我使用非英文字符的数据到控制器。例如)在 url 中传递多章字节作为发布请求。
但在控制器中,数据接收为
多«字节
任何人都可以帮助我解决这个问题吗?
首先,您需要告诉浏览器您正在提供 UTF-8 内容并期望 UTF-8 提交。您可以通过将行放在 JSP 的最顶部来做到这一点,
<%@page pageEncoding="UTF-8" %>
或者通过添加以下条目,web.xml
这样您就不需要重复@page
所有 JSP:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
然后,您需要告诉 servlet API 使用 UTF-8 来解析 POST 请求参数。您可以通过创建一个基本上执行以下操作的servlet 过滤器来做到这一点:
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
chain.doFilter(req, res);
}
// ...
}
就这样。您不需要(在使用 MSIE 浏览器时<form accept-charset>
这会使事情变得更糟)并且您不一定需要<meta http-equiv="content-type">
(仅在从本地磁盘文件系统而不是通过 HTTP 提供页面时才解释)。
请注意,当您使用System.out.println()
logger 来验证提交的值时,它也应该被配置为使用 UTF-8 来呈现字符,否则仍然会被 Mojibake误导。
您可以在您的操作方法中使用它
request.setCharacterEncoding("UTF-8");
这必须在任何调用之前request.getParameter()
调用
并根据您的需要更改编码
你也可以参考这个