我有一个页面,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árioouemailindisponÃ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");
...
}
此外,this未得到答复。
编辑:我已经更改为response.setCharacterEncoding(“UTF-8”)而不是请求,问题仍然存在。
答案 0 :(得分:1)
更正,您的问题是重定向,您可以查看一些解决方案here,尤其是提及使用SetCharacterEncodingFilter的解决方案。
通过修改web.xml
部分中的web-app
<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>
答案 1 :(得分:1)
首先,我是Java的Tomcat和Web Development的新手,所以我不知道用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
作为头等舱部署网络应用,我必须将其更改为org.apache.catalina.filters.SetCharacterEncodingFilter
。
结论:
-Dfile.encoding=UTF-8
。