# Default Encoding der JVM



## takidoso (29. März 2011)

Hallo und Halli,
erst vor kurzem habe ich mich auf einer Solriskiste mächtig gewundert. Es existiert ein rein dateiverarbeitendes Programm und sein startscript  schon seit Jahren. Zeitlich gleich nach einer kleineren Programmänderung meinte das Programm plötzlich Umlaute nicht mehr mitnehmen zu können. Die ursache war in sofern schnell gefunden, dass die Solariskiste von den Betriebssystemeinstellung offenbar nicht den gewünschten ISO8859-15 verwendet, zumindest zeigten Tests mit Abfrage irgendeine reine ASCII Encodierung.

Ich weiß,dass der JVM mittels Vorgabe der System-Property *file.encoding* das Encoding vorgegeben werden kann. Doch woher nimmt eine JVM eigentlich den Default? Ich hatte angenommen und fand auch ein paar vage Hinweise im Internet, dass sie es aus dem Betriebssystem nähme. Aber woher genau (z.B. bei Solaris)? 

Das Rätsel, was sich mir heir stellt, warum geht es Jahre lang gut und dann plötzlich nicht mehr? Kann es sein dass Complieparameter auch ausschlaggebend sein können?

Mit fragenden Grüßen

Takidoso


----------



## mccae (29. März 2011)

Es stimmt, die JVM nimmt das Default Encoding des Betriebsystems welches bei fast allen Unix Derivaten standardmäßig "US-ASCII" ist.

Das Setzen via Property muss vor dem Start der Anwendung über JVM Parameter erfolgen.

Ansonsten wird für alle Strings und Streams das Default-encoding benutzt.

Beim Programmieren muss darauf geachtet werden, dass bei bestimmten Ein und Ausgabeströmen sowie bei Strings das gewünschte Encoding verwendet wird.

Was man bei Solaris tun muss um dieses umzustellen, weiß ich nicht.

mfg,
Martin


----------



## genodeftest (29. März 2011)

Bei Windows gibt es ganz viele verschiedene Encodings, siehe https://secure.wikimedia.org/wikipedia/en/wiki/Code_page
Für Linux ist es meines Wissens UTF-8, die JVM benutzt intern eine Abwandlung von UTF-16


----------



## takidoso (31. März 2011)

Hat jemand vielleicht eine Idee, in welcher Doku man lesen muss um das Geheimnis zu lüften?


----------



## mccae (31. März 2011)

genodeftest hat gesagt.:


> die JVM benutzt intern eine Abwandlung von UTF-16


.

Die JVM benutzt für Strings intern zwar UTF16, jedoch wird zum Beispiel bei einem PrintStream das Default File-Characterencoding des Betriebssystems benutzt.

Wenn eine Datei jetzt zum Beispiel US-ASCII encoded ist, dann verändert das Umstellen des Encodings im Betriebssystem die vorliegende Textdatei nicht.

Lieber Threadersteller, was meinst du mit "Umlaute nicht mehr mitnehmen können"?.
Handelt es sich hier um ein Problem mit dem Ein/Auslesen von (Text)Dateien?
Oder ist die Darstellung von Sonderzeichen auf einer grafischen Oberfläche nicht möglich?


----------

