如何在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

ISO-8859-1将“%E9”解码,并显示“é”。

为什么这不起作用?为什么用ISO-8859-1解码请求?

我已经在Tomcat 6和7以及Windows和Ubuntu上尝试过。

回答:

request.setCharacterEncoding("UTF-8");只设置请求的编码体(其被用于通过POST请求),而不是请求的编码URI(其被用于由GET请求)。

你需要在Tomcat的元素中将URIEncoding属性设置为UTF-8,以使Tomcat将请求URI(和查询字符串)解析为UTF-8。这确实默认为ISO-8859-1。另请参见Tomcat HTTP连接器文档。<Connector>/conf/server.xml

<Connector ... URIEncoding="UTF-8">

或确保使用与正文1相同的编码来解析URI :

<Connector ... useBodyEncodingForURI="true">

以上是 如何在Tomcat中设置请求编码? 的全部内容, 来源链接: utcz.com/qa/406267.html

回到顶部