将非英文字符的数据传递给Web服务器

时间:2013-02-26 13:50:56

标签: java jsp tomcat

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

但是控制器数据正在接收为

multiç«字节

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

2 个答案:

答案 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

request.getQueryString() seems to need some encoding