# Fragezeichen statt Umlaute



## Halunken-Joe (20. Jun 2007)

Hallo alle zusammen,

ich sitze schon drei Tage über dem Problem, habe die Forumssuche bemüht, Google gefragt und das SunForum durchsucht.

Problem: Formular -> JSP -> Bean -> MySQL -> hier kommen Fragezeichen statt Umlaute an.

Ich habe mittlerweile vom tippen wunde Finger und Orte gesehen an denen man den 'UTF-8' setzen kann, die sonst keiner kennt   :### 

Formular (zwei Textfelder, ein FileUpload, erstellt von Tomcat, Linux):
====================================

```
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

<form action="upload_gps_file.jsp"
          method="post"
          encoding="UTF-8" 
          accept-charset="UTF-8"
          enctype="multipart/form-data">
```

alternativ:


```
<%@ page language="java"%>
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
```

JSP (erstellt von Tomcat, Linux):
====================================

```
<% request.setCharacterEncoding("UTF-8"); %>
```

Bean:
====================================

```
request.setCharacterEncoding("UTF-8");
```

MySQL Treiber (jdbc v5.06):
====================================

```
&useUnicode=true&characterEncoding=ISO-8859-1
```

MySQL (5.x.irgendwas, Linux)
====================================

```
Tabelle: utf-8
varchar: utf-8
text: utf-8
```


Mir gehen so langsam die Ideen aus, an welchen Stellen im Code ich noch drehen könnte.  Hin- und wieder stoße ich in Foren auf das gleiche Problem, manchmal mit Lösung, manchmal ohne. Aber auch deren Lösungen bringen mich nicht weiter.  Es scheint an dem Multipart-Formular und dem dahintersteckendem Request zu liegen, denn ich habe noch ein zweites Formular (ohne Upload) und mit dem funktioniert es bestens.

Hat jemand noch einen guten Tipp? Ach ja, das mit dem jdbc Treiber habe ich ich nicht ganz verstanden. Ich habe probeweise das ISO-8859-1 gegen UTF-8 ausgetauscht, hat aber auch nichts gebracht. Das einzige was passiert wenn ich an diesem Parameter drehe ist, das in der MySQL schwarze Balken statt Fragezeichen erscheinen.

Ich bestehe ja auch nicht auf UTF-8, wenn es einen guten Workaround mit ISO-8859 geben sollte. Ich bin schon kurz davor mir einen Filter a la 'x = replace (ä , ae)' zu schreiben. Aber das kann es ja nicht sein.

Und ja, wenn ich direkt in die MySQL Datenbank schreibe, kann ich mit Umlauten arbeiten und sie auch auslesen.


----------



## WeirdAl (20. Jun 2007)

Hi,
hast Du schonmal probiert, die Umlaute als HTML Entities zu verarbeiten?

Cu
Alex


----------



## Halunken-Joe (20. Jun 2007)

Ein weiteres Problem ist, das ich den Request in der Bean nicht wie gewohnt abfragen kann. Normalerweise lautet der Befehl dazu:


```
String irgendwas = request.getParameter ("irgendeiner_der_feldnamen");
```

Der Result-String bleibt immer *null* - warum auch immer.  Ich muß den Request zuerst mit den jakarta.fileuploads Methoden behandeln und zerlegen. Und genau da scheinen die Umlaute auf der Strecke zu bleiben.

Kann es sein das die jakarta.fileupload Methoden mit Bytes arbeiten und ich für die Umlautdarstellung Chars benötige?

Wenn es so tief reingeht, dann komme ich nicht mehr mit.


----------



## Halunken-Joe (20. Jun 2007)

WeirdAl hat gesagt.:
			
		

> hast Du schonmal probiert, die Umlaute als HTML Entities zu verarbeiten?



Ja, in den Archiven der Apache Mailingliste gibt es Hinweise darauf das man es so macht. Allerdings ist mir momentan nicht klar wie ich VOR Absetzen des Requests die Umlaute umwandeln kann. Ist der Request erst einmal abgesetzt kann ich ihn nicht auseinanderpuzzeln sondern muß ihn mit den Methoden der jakarta.fileuploads bearbeiten.

Das einzige was mir zur Zeit einfällt ist, NACH der Auswertung des Requests die Sache wieder gerade zu biegen.  So toll ist das auch wiederum nicht.


----------



## WeirdAl (20. Jun 2007)

Hi,
wenn der Request abgesetzt wird, kannst Du mit Servlet Filtern den request "abfangen" bearbeiten und weiterreichen.

Cu
Alex


----------



## Halunken-Joe (21. Jun 2007)

Das mit den ServletFiltern fand ich nicht so ansprechend, aber ich habe es trotzdem gelöst.

Nachdem ich aufgehört hatte rumzugoogeln und angefangen hatte das mitgelieferte JAVADOC zu lesen ging es plötzlich ganz schnell ...

Parst man den Request und zerlegt ihn in Streams, gibt es einen optionalen Parameter mit dem man das Encoding des Streams setzen kann. Im Beispiel auf der jakarta.fileuploads Seite fehlte dieser Parameter (und auch der Hinweis drauf).  

Der Grund? Die Amerikaner arbeiten ja alle vermutlich ausschließlich mit den ASCII Zeichen, da muss dieser optionale Parameter nicht gesetzt werden. 

Aber dieses rumgoogeln hat mich drei Tage gekostet. Das Netz ist voll von Leuten  (Spanier, Franzosen, Japaner ) die alle das Beispiel abgetippt, ihr Hirn am Empfang von Google abgegeben und dann allesamt in Foren die gleiche Frage gestellt haben woran das Encoding der Sonderzeichen denn scheitert.


----------

