0

从 html ,我使用非英文字符的数据到控制器。例如)在 url 中传递多章字节作为发布请求。

但在控制器中,数据接收为

多«字节

任何人都可以帮助我解决这个问题吗?

4

2 回答 2

1

首先,您需要告诉浏览器您正在提供 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误导

也可以看看:

于 2013-02-26T14:23:44.933 回答
0

您可以在您的操作方法中使用它

request.setCharacterEncoding("UTF-8");

这必须在任何调用之前request.getParameter()调用

并根据您的需要更改编码

你也可以参考这个

HttpServletRequest - setCharacterEncoding 似乎什么都不做

request.getQueryString() 似乎需要一些编码

于 2013-02-26T13:53:25.187 回答