从html,我使用非英文字符的数据到控制器。 例如)在url中传递多章节字节作为发布请求。
但是控制器数据正在接收为
multiç«字节
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
首先,您需要告诉浏览器您正在提供UTF-8内容并期望提交UTF-8。您可以通过将行放在JSP的最顶端来实现,
<%@page pageEncoding="UTF-8" %>
或将以下条目添加到web.xml
,这样您就不需要对所有JSP重复@page
:
<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 filter来完成此操作,基本上可以执行以下操作:
@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);
}
// ...
}
这就是全部。你做不需要<form accept-charset>
(这会在使用MSIE浏览器时让事情变得更糟)你做不一定需要<meta http-equiv="content-type">
(这只是在该页面由本地磁盘文件系统而不是HTTP提供。
请注意,当您使用System.out.println()
或记录器来验证提交的值时,它应该又被配置为使用UTF-8来呈现字符,否则您将被误导仍然出现Mojibake。
答案 1 :(得分:0)
您可以在动作方法中使用它
request.setCharacterEncoding("UTF-8");
这必须在任何request.getParameter()
电话
并根据您的需要更改编码
你也可以参考这个
HttpServletRequest - setCharacterEncoding seems to do nothing