New Java 18 Feature: Default Charset UTF-8
Intern benutzt Java UTF-16, "extern" wurde bisher standartmäßig das Encoding des Betriebssystems, zB Windows-1252, verwendet. Das hatte in der Vergangenheit immer wieder zu lustigen Encoding Problemen geführt, so dass ich schon lange meine Projekte und IDE Einstellungen auf UTF-8 umgestellt hatte. Ausnahme sind die Property-Dateien, die erst ab Java 9 UTF-8 können. Und Java 9 ist noch lange nicht in allen Projekten verfügbar.
Mit Java 18 wurde endlich JEP 400: UTF-8 by Default umgesetzt.
Das Problem ���
Ich habe ein kleines Testprojekt aufgesetzt und dafür Java 19 verwendet. Dabei stieß ich irgendwann auf ein Encoding Problem, dass sich recht einfach nachstellen ließ:
package deringo; public class TestMain { public static void main(String[] args) { String s = "abc äüß def"; System.out.println(s); } }
Output:
Projekt auf Java 17 umgestellt und der Output ist korrekt:
Die IDE ist Eclipse und der Bug ist bekannt: Bug 579383
Mit Java 17 wurde, als Vorbereitung auf JEP400, eine neue System Property eingeführt: native.encoding
Die kann man sich ganz einfach anzeigen lassen:
String encoding = System.getProperty("native.encoding"); System.out.println(encoding);
Sowohl unter Java 17 wie unter Java 19 wird bei mir angezeigt:
Was nicht funktioniert hat
Die eclipse.ini erweitern:
-Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8
Die Lösung
In der Run Configuration für das Programm unter Common -> Encoding auf Use system encoding umstellen.
Oder erstmal weiterhin Java 17 verwenden. 🤷♂️