# Komplettes Durcheinander / Locales OSX/Linux Glassfish



## chrisbad (27. Nov 2012)

Hallo Leute,

ich programmiere gerade etwas auf Basis von Glassfish und Primefaces und verzweifle an der Zeichensatzkonvertierung der Dateinamen. 

Ich programmiere auf einem MacBookPro unter Netbeans 7.2

Das Problem ist, dass ich einen FileUpload (Primefaces + commons.fileupload) programmiert habe und alles funktioniert bis auf die Sonderzeichen in Dateinamen.

Ich lasse Glassfish sowohl unter OS X als auch unter einem Ubuntu-Linux zum testen laufen.
Beide Male funktioniert der Upload aber die Dateien werden falsch benannt sobald Sonderzeichen enthalten sind. Aus "Überraschung" wird z. B. "?berraschung". Alles Umlaute werden durch "?" ersetzt.
In der Datenbank und im Browser wird der Dateiname korrekt ausgegeben. Nur im Filesystem nicht.
Das führt dazu, dass ich Dateien nicht mehr löschen kann, da die Datei nicht mehr gefunden wird.

Das Problem mit dem MacFilesystem und UTF-8 ist mit bekannt aber ich komme auf keinen Workaround. Ebenso die Problematik mit commons.fileupload. Ich habe sogar den EncodingFilter von PrimeFaces drin und trotzdem funktioniert es nicht.

Eine Compileroption der JVM des GF hat auch nichts geholfen.

Locale auf dem Mac alles auf "de_DE.UTF-8". Ebenso auf Linux.
ein getDefaultLocale() während des Verarbeiten des Upload bringt auf dem Mac  "de_DE.UTF-8" und auf Linux  "en_US". 

Hat jemand eine spontane Idee? Mich macht das grad völlig kirre ;-)

Hüüüülfeeeeee und Danke im Voraus....LG Chris


----------



## chrisbad (28. Nov 2012)

chrisbad hat gesagt.:


> Hallo Leute,
> 
> ich programmiere gerade etwas auf Basis von Glassfish und Primefaces und verzweifle an der Zeichensatzkonvertierung der Dateinamen.
> 
> ...



EDIT:

Alsoooo....jetzt wird's etwas klarer, hoffe ich:

Wenn ich auf dem gleichen System (OS X 10.7, Netbeans 7.2, Glassfish 3.1.2) ein ganz normales Programm schreibe (SE), eine Datei "test-äöüÄÖÜ.txt" erstelle, speicher, und dann ein file.getName() mache ist alles gut. Die Codierung zeigt UTF-8 Locale ist de_DE.

Wenn ich das Gleiche im Glassfisch mache, dann sind nach dem getName() alle Sonderzeichen in ? geandelt. Das Encoding des HttpServletRequests ist UTF-8, Locale ist de_DE ABER das DefaultCharset ist US-ASCII und file.encoding ist US-ASCII.

-Dfile.encoding=UTF-8 bringt leider keine Änderung am Problem

Also kann das Problem nur im Glassfish liegen. Hat jemand eine Ahnung?


----------



## chrisbad (28. Nov 2012)

Also weitere Tests ergaben auf ein und demselben System

Java SE    -> Dateierzeugung mit Umlauten kein Problem
Glassfish  -> Dateinamen mit Umlauten werden durch "?" ersetzt.

Java SE DefaultCharset -> UTF-8
GF DefaultCharset -> US-ASCII

Wie bringe ich dem Glassfish nun bei UTF-8 zu nutzen? Ich finde in der Admin-Console nichts dazu.
Als Standard sollte er auch ISO-89... irgendwas benutzen, oder?

LG Chris


----------



## chrisbad (28. Nov 2012)

Ok ich habs...MacOs codiert Dateinamen in MacRoman.
Java 1.6 kann's weil's von Apple kommt.
Java 1.7 kann's nicht weil's von Oracle kommt.

Schöner Mist.

Also habe ich wieder auf 1.6 umgestellt und die Dateinamen werden wieder richtig gespeichert.
In der Konsole zeigt mir Java allerdings immer noch falsche Zeichen an.

Wie komme ich denn da jetzt drum rum?


----------

