# servlets und character encoding



## xardias (6. Okt 2005)

Hallo allerseits

ich arbeite mit Java Servlets und stehe gerade vor einem kleinen Problem.
Ich versuche die Servlet Ausgabe komplett in UTF-8 zu halten (Da es normalerweise am wenigsten probleme bereitet). Ich habe das Eclipse Projekt auf UTF-8 eingestellt, und testweise einfach mal ein paar Umlaute im Serlvet Code ausgeben lassen. Jedoch kommen nur "?" statt der Umlaute an. Die Source Codes sind UTF-8, was ich mit einem anderen Editor (scite) überprüft habe.

Eine kurze Zusammenfassung wie ich meinen Writer zum ausgeben erzeuge:

```
TagWriter out = new TagWriter( httpResponse.getOutputStream() );
[...]
class TagWriter
{
    public TagWriter(OutputStream out)
    {
        PrintWriter writer = new PrintWriter(out);
        [...]
    }
}
```
über diesen erzeugten PrintWriter gebe ich Umlaute aus. Ich habe schon versucht per response.setCharacterEncoding das Ecnoding auf UTF-8 umzustellen, jedoch ohne Erfolg.

Muss ich da noch was anderes beachten?

Dennis


----------



## daLenz (6. Okt 2005)

hi, wann hast du dann das encoding gesetzt?

--> http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html


> The setCharacterEncoding, setContentType, or setLocale method must be called before getWriter and before committing the response for the character encoding to be used



greetz


----------



## xardias (6. Okt 2005)

danke, daran hatte ich garnicht gedacht. aber auch wenn ich httpResponse.setCharacterEncoding("UTF-8"); ganz zu beginn eines Request aufrufe ändert sich leider nichts :/. Firefox erkennt das Encoding auf jeden Fall als UTF-8 (vermutlich aus dem xml header, da ich xhtml 1.1 verwende).

_edit_
mir fällt gerade auf, dass der Internet Explorer im Quellcode Editor die Umlaute richtig darstellt. Nicht aber auf der Internetseite selbst.


----------



## Bleiglanz (6. Okt 2005)

den content-type im http header mal anschaun??

und eventuell auch das <meta> tag mit dem content type setzen


----------



## xardias (6. Okt 2005)

Bleiglanz hat gesagt.:
			
		

> den content-type im http header mal anschaun??
> 
> und eventuell auch das <meta> tag mit dem content type setzen


der content type steht auf application/xhtml+xml (bzw text/html, falls der browser kein xhtml 1.1 unterstützt).

Ich habe jetzt auf jeden Fall den Fehler gefunden.
Verwende ich direkt httpRequest.getWriter() zur Ausgabe, klappt das gesamte Character Encoding. Es muss also irgendwie am umweg über new PrintWriter(httpResponse.getOutputStream()) liegen.
Naja, es läss sich umgehen. Ich verstehe nicht so ganz warum das passiert, aber wenn es sich umgehen lässt bin ich zufrieden.

Danke für eure hilfe.


----------

