Normalerweise sollte der Browser des Clients die Kodierung der Parameter mitschicken. Fehlt diese Angabe, nehmen einige Web-Server automatisch ISO-8859-1 an. Dies ist jedoch oft nicht erwünscht und kann zu Problemen führen. Möglicherweise werden Parameter nicht richtig interpretiert, da der Server die GET- und POST-Parameter falsch dekodiert. Um die Kodierung auf UTF-8 zu ändern, müssen nur wenige Änderungen vorgenommen werden.
Jede HTML-Seite sollte innerhalb des „head“-Tags diesen Eintrag haben:
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
Folgender Text muss sich in der Datei web.xml innerhalb des „webapp“-Tags befinden:
<filter> <filter-name>Parameter-Encoding</filter-name> <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Parameter-Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Diese Angaben setzen einen UTF-8-Filter auf alle Servlets (Wildcard /*). Die verwendete Klasse org.apache.catalina.filters.SetCharacterEncodingFilter
ist ab einer bestimmten Version (7.0.*) in Tomcat integriert.
Schlussendlich muss die Kodierung noch in der Server-Konfiguration angegeben werden. Die Datei server.xml befindet sich im Ordner „conf“ des Server-Verzeichnisses.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
Bei Jetty, dem unter anderem im Google App Engine verwendeten Server, muss nur folgender Code in jedes Servlet eingebaut werden:
request.setCharacterEncoding("UTF-8");
request
ist das vom Server an die Methoden doGet()
und doPost()
bzw. processRequest()
übergebene HttpServletRequest
-Objekt. Dieser Aufruf muss natürlich vor jeder Parameter-Abfrage geschehen. Am praktischsten erledigt man das mit einer gemeinsamen Basisklasse für alle Servlets, die diese Methode automatisch aufruft.