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.

Das apache-wiki-Seite kann Ihnen helfen; durch Sie laufen, um zu sehen, ob es irgendwelche änderungen, die Sie vornehmen können.

InformationsquelleAutor Guillaume | 2011-07-29

Schreibe einen Kommentar