Festlegen Anfrage-Codierung in Tomcat?
Ich habe ein problem in meinem Java-webapp.
Hier ist der code in der 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>
Wenn ich wireshark ein Wunsch, mein browser diesen header sendet:
GET /kjd/index.jsp?q=%C3%A9 HTTP/1.1\r\n
...
Accept-Charset: UTF-8,*\r\n
Und der Tomcat-server gibt mir das:
Content-Type: text/html;charset=UTF-8\r\n
Aber wenn ich senden "é"(%C3%A9 in UTF-8) in meiner form, "é" wird stattdessen angezeigt.
Was ich verstehe ist, dass der browser sendet ein "é" mit UTF-8 codiert (%C3%A9).
Aber der server interpretieren diese als ISO-8859-1. Also die %C3 ist entschlüsselt à und %A9 als ©, und sendet anschließend die Antwort in UTF-8 codiert.
In den code, die Anforderungen sollten entschlüsselt werden mit UTF-8:
request.setCharacterEncoding("UTF-8");
Aber, wenn ich senden Sie diese url:
http://localhost:8080/kjd/index.jsp?q=%E9
"%E9" ist decocded mit ISO-8859-1 und ein "é" angezeigt.
Warum das nicht funktioniert? Warum fordert dekodiert, mit ISO-8859-1?
Habe ich versucht es auf Tomcat 6 und 7, und Windows und Ubuntu.
InformationsquelleAutor Guillaume | 2011-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
request.setCharacterEncoding("UTF-8");
stellt nur die Codierung der Anfrage Körper (was durch POST-Anfragen), nicht die Codierung der Anfrage URI (was bei GET-Anfragen).Müssen Sie die
URIEncoding
AttributUTF-8
im<Connector>
element von Tomcat/conf/server.xml
um Tomcat zum Parsen der Anfrage-URI (und der query-string) als UTF-8. Diese in der Tat standardmäßig auf ISO-8859-1. Siehe auch die Tomcat HTTP-Connector Dokumentation.bzw. um zu gewährleisten, dass die URI geparst wird mit der gleichen Codierung wie der Körper :
Siehe auch:
Bitte diejenigen loswerden, die scriptlets in Ihrer JSP. Die
request.setCharacterEncoding("UTF-8");
genannt wird, im falschen moment. Es wäre zu spät, wenn Sie haben, richtig eingesetzt, ein Servlet, die Anforderung zu verarbeiten. Sie würde lieber wie zu verwenden filter. Dieresponse.setCharacterEncoding("UTF-8");
Teil ist implizit schon getan, durchpageEncoding="UTF-8"
im oberen JSP.Ich auch empfehlen ersetzen die altmodische
<%= request.getParameter("q") %>
scriptlet von EL${param.q}
oder mit JSTL XML-escaping${fn:escapeXml(param.q)}
um zu verhindern, dass XSS-Angriffe.InformationsquelleAutor BalusC
müssen Sie nur die Auskommentierung unten Teil des Codes in conf/web.xml (Tomcat-server web.xml), die filter alle Anfragen und konvertieren in UTF-8.
das ist es. funktionieren in tomcat
InformationsquelleAutor Divyesh Kanzariya