繁体   English   中英

为什么使用RequestDispatcher时UTF-8在html页面中不起作用? 如何解决?

[英]Why UTF-8 does not work in html page when using RequestDispatcher? How to fix it?

我有一个页面,并且UTF-8起作用:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>:(</title>
        <link rel="stylesheet" href="font-awesome/css/font-awesome.min.css" type="text/css">
        <link href='http://fonts.googleapis.com/css?family=Varela+Round' rel='stylesheet' type='text/css'>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
        <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">
        <link rel="stylesheet" href="css/login.css" type="text/css">
        <link rel="stylesheet" href="css/creative.css" type="text/css">
    </head>
    <body>
        <div class="text-center" style="padding:50px 0">
            <div class="logo">Usuário ou email indisponíveis :(.</div>
        </div>
    </body>
</html>

但是,当我使用RequestDispatcher将用户重定向到此资源时,它完全忽略了页面的UTF-8编码(消息以葡萄牙语显示,显示为“Usuárioou emailindisponÃveis:(。”)。

if (this.hasRecord(connection, (String) requestData.get("reg_username"), (String) requestData.get("reg_email")) == true) {
    RequestDispatcher requestDispatcher = request.getRequestDispatcher("/user_taken.html");
    requestDispatcher.forward(request, response);
} else {
    statement.executeUpdate();
}

在做任何事情之前,我都做过:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    ...
}

另外, 是未解决的。

编辑:我已经更改为response.setCharacterEncoding(“ UTF-8”)而不是请求,问题仍然存在。

更正,您的问题是在重定向上,您可以在此处检查一些解决方案,尤其是其中提到使用SetCharacterEncodingFilter的解决方案。

通过在web-app部分中修改web.xml

<filter> 
    <filter-name>CharSet<filter-name> 
    <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
    <init-param> 
        <param-name>encoding</param-name> 
        <param-value>UTF-8</param-value> 
    </init-param> 
</filter> 

您还应该添加一个过滤器映射,以指定应将其应用到何处

<filter-mapping>
    <filter-name>CharSet</filter-name>
    <url-pattern>*.html</url-pattern>
</filter-mapping>

经过几天的苦难,我终于解决了问题。

首先,我是Java的Tomcat和Web开发的新手,所以我不知道要用dvhh的答案来修改哪个“ web.xml”文件(我已经检查过了,默认情况下Tomcat具有EXACT过滤器host-manager文件夹内的WEB-INF文件夹)。 然后,他说我必须在自己的Web应用程序内部进行更改,但是没有web.xml(因此我意识到必须创建一个)。 我发现可以在Netbeans中创建它并使用GUI轻松添加过滤器,所以我做到了(此外,我已经从servlet源中删除了response.setCharacterEncoding("UTF-8") )。

尽管如此,问题仍然存在。 然后我才意识到一个明显的事实:“它在JAVA上运行”,所以我按CTR + 5在Netbeans中打开“服务”,转到“服务器”,右键单击“ Apache Tomcat”,选择“属性”,转到“平台”并添加到VM选项: -Dfile.encoding=UTF-8

另外,不能仅使用filters.SetCharacterEncodingFilter作为第一类来部署Web应用程序,我不得不将其更改为org.apache.catalina.filters.SetCharacterEncodingFilter

结论:

  • 您必须将过滤器和过滤器映射正确添加到Web应用程序的web.xml中。
  • 您必须使用-Dfile.encoding=UTF-8运行JVM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM