# Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET)



## atoc (15. Jan 2010)

Hallo allerseits,

bin neu hier und ich hoffe ich bin an der richtigen Stelle gelandet. Wenn nicht, bitte um Nachsicht und Verschieben
Ich arbeite gerade an meinem Abschlußprojekt für meine Ausbildung und habe ein Problem, wäre bombe wenn jemand nen Lösungsansatz oder ne Idee hätte.

Also im Groben bau ich ne Schnittstelle zwischen ner MySQL-Datenbank und nem Servlet. Die Datenbank ist via EJB3 auf verschiedene Objekte abgebildet und die Kommunikation zwischen Geschätslogik (SQL-Abfragen) und Servlet findet über ein Remote-Interface statt.
Das Servlet übernimmt die Parameter des GET-Requests aus der übergebenen Request-Variable und leitet sie entsprechend weiter. Verwende JBOSS 2.2.3. als Application-Server

Das funktioniert auch alles soweit, nur habe ich Probleme mit der Zeichenkodierung innerhalb der Request-Parameter.

In dem Servlet werden auch Links erzeugt, die wiederum einen neuen Request darstellen, dort enkodiere ich die Parameter mittels


```
java.net.URLEncoder.encode(String string, "UTF-8");
```

Dieser String wird auch korrekt auf der HTML-Seite ausgegeben (Bsp: %C3%B6 -> ö)

Nun dachte ich beim Servlet einfach


```
java.net.URLDecoder.decode(String string, String "UTF-8");
```

verwenden zu können um die Parameter wieder zu dekodieren, das klappte aber nicht, es kamen nur Strings in der Form "Ã¶" (ö-> Ausgabe der Konsole) an, mit der diese Methode logischerweise nichts anfangen kann.

Habe dann im Internet eine Möglichkeit gefunden, es klappte dann mittels


```
value = new String(value.getBytes("ISO-8859-1"));
```

Nun mein aktuelles Problem: Habe hier auf Arbeit eine Entwicklungszone mit Solaris als Betriebssystem. Dort ist die gleiche Jboss-Version installiert und auch die gleiche Version meines Projekts deployed wie auf meinem lokalen Rechner. Dort klappt das alles wieder gar nicht, es kommt für jegliche Sonderzeichen nur der String "" an. Habe schon sämtliches versucht und finde auch im Netz irgendwie nichts was mir weiterhelfen könnte. Hat jemand von euch da eine Idee? Das Problem ist nämlich, dass das Projekt wenn es fertig ist auf genau so einer Zone laufen soll, also müsst ich das irgendwie hinbekommen.

Wenn ich in der server.xml meines Servers beim Connector-Tag 'URIEncoding="UTF-8"' hinzufüge, brauch ich den Parameter bei mir lokal gar nicht mehr dekodieren und auf der Zone kommt nur noch ein ? an.

Was vielleicht auch noch hilfreich ist, verwende die Bibliothek Apache Commons Lang (org.apache.commons.lang.StringEscapeUtils.escapeHtml()) zum escapen der Strings, und diese liefert mir trotz des ? im übergebenen String das richtige Zeichen zurück (Bsp: &uuml; ) Also muss in dem String ja irgendwie das richtige Zeichen versteckt sein.
unescapeHtml(escapeHtml(string)) klappt leider nicht, liefert wieder das Fragezeichen. ???:L

Sehr merkwürdig das alles, naja würde mich wie gesagt freuen wenn jemand ne Idee hat

beste Grüße


----------



## Antoras (15. Jan 2010)

Mit einem JBoss kenne ich mich nicht aus, ich weiß nur, dass der Application Server einen Tomcat enthält. Und bei dem hatte ich auch mal das gleiche Problem mit den unterschiedlichen Charsets.

Hier in dem Beitrag hat vor kurzem auch jemand dieses Problem gehabt: http://www.java-forum.org/web-tier/94660-tomcat-jsp-utf-8-url-codierung.html

Ich hab dort einen Link gepostet, der auf das Tomcat-Wiki verweißt. Dort gibt es eine Möglichkeit, das Problem mit einem Filter zu lösen. In wie fern oder ob es überhaupt dir das jetzt bei dem JBoss weiterhilft kann ich leider nicht sagen.

Ein guter Suchbegriff bei Google wäre für dich sonst noch 
	
	
	
	





```
jboss charset
```
, nur falls du den noch nicht ausprobiert hast und der Filter nicht weiterhilft.


----------



## atoc (22. Jan 2010)

Hey,

Vielen Dank für die antwort!
Habe das Problem inzwischen mit dem Eintrag


```
useBodyEncodingForURI="true"
```


in der server.xml und mit ner JSP gelöst. Das Problem mit den Umlauten auf der Solaris-Zone (Terminal) war eigentlich gar keins, kam anscheinend nur durch die SSH-Verbindung nich richtig an.. Blöd und verwirrend sowas

Viele Grüße


----------

