如何在Tomcat中设置请求编码?
我的 Java Web 应用程序有问题。
下面是 index.jsp 中的代码:
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<% request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<form action="index.jsp" method="get">
<input type="text" name="q"/>
</form>
Res: <%= request.getParameter("q") %>
</body>
</html>
当我连接请求时,我的浏览器会发送以下标头:
GET /kjd/index.jsp?q=%C3%A9 HTTP/1.1\r\n
...
Accept-Charset: UTF-8,*\r\n
Tomcat 服务器向我返回了以下内容:
Content-Type: text/html;charset=UTF-8\r\n
但是,如果我以形式发送“é”(UTF-8 中的 %C3%A9),则会显示“é”。
我的理解是浏览器发送了一个用UTF-8编码的“é”(%C3%A9)。
但是服务器将其解释为ISO-8859-1。因此,%C3 被解码为 Ã,%A9 解码为 © ,然后发回以 UTF-8 编码的响应。
在代码中,应使用 UTF-8 对请求进行解码:
request.setCharacterEncoding("UTF-8");
但是,如果我发送此网址:
http://localhost:8080/kjd/index.jsp?q=%E9
“%E9”与 ISO-8859-1 解除关系,并显示“é”。
为什么这不起作用?为什么请求使用 ISO-8859-1 进行解码?
我已经在Tomcat 6和7以及Windows和Ubuntu上尝试过它。