JEP 227 & JEP 267: Erweiterungen im Unicode-Support

© Shutterstock.com / Profit_Image
Das kürzlich erschienene Java 9 besteht aus mehr als nur Modulen und dem Projekt Jigsaw. Über 90 sogenannte JEPs (JDK Enhancement Proposals) sind Teil von Version 9 des Java Development Kits. Im achten Teil seiner Serie zu Java 9 stellt Michael Inden, Oracle-zertifizierter Java-Entwickler, die mit JDK 9 eingeführten Erweiterungen im Unicode-Support vor, die in den JEPs 227 und 267 zusammengefasst sind.
Die vorliegende Artikelserie zu Java 9 setzt sich aus Texten von Michael Indens Buch „Java 9 – Die Neuerungen“ zusammen, das beim dpunkt.verlag erschienen ist.
PS: Verpassen Sie nicht unsere Infografik zu Project Jigsaw!
Nachdem wir im ersten Teil dieser Blog-Serie diverse kleinere Änderungen in der Syntax der Sprache Java kennengelernt haben, schauten wir uns im zweiten Teil einige relevante Erweiterungen im JDK an, konkreter: im Process-API und den Collection-Factory-Methoden. Im dritten Teil ging es anschließend um die Ergänzungen im Stream-API, im vierten Teil besprachen wir die Erweiterungen in Optional<T>
. Im fünften Teil der Artikelserie standen die Erweiterungen der Java-Klasse LocalDate
im Fokus, in Teil sechs war die Verarbeitung von Stackframes und der Klasse StackWalker
Thema. Im siebten Teil seiner Reihe stellte Michael Inden den Taskbar-Support von Java 9 vor, in Teil 8 sind die Erweiterungen des Unicode-Supports an der Reihe.
Java 9: Erweiterungen im Unicode-Support
Durch Unicode lassen sich Zeichen verschiedener Sprachen codieren, indem jedes Zeichen durch eine Nummer repräsentiert wird. Dabei gibt es immer wieder Erweiterungen im Unicode-Standard – derzeit ist Unicode 8 aktuell. Vor Java 9 wurde im JDK nur Unicode in Version 6 unterstützt. Java 9 kann nun auch mit Unicode 7 und 8 umgehen, wobei Unicode 7 Verbesserungen bezüglich bidirektionalem Text beinhaltet und Unicode 8 Neuerungen bei Emojis umfasst.
Schauen wir uns ein Beispiel an. Dort werden verschiedene neue Zeichen hinter der Markierung — aufgeführt:
public static void main(final String[] args) { final String text = "Text \u00B0 \u1801 \u25D0 \u2A0C \u83fb --- " + "\u1f605 \u1f310 \u1f575 \u1F917"; System.out.println(text); }
Startet man das obige Programm, so erlebt man eine Überraschung, weil es auf der Konsole in etwa zu folgender Ausgabe kommt und es so scheint, als ob mit Java 9 die Unicode-Zeichen aus dem neuen Unicode-8-Standard doch nicht unterstützt würden.

Darstellung des Programms UNICODE8EXAMPLE
Darstellung auf der Konsole mithilfe eines Tricks
Wenn man ein wenig nachforscht, so stellt man fest, dass Unicode-Zeichen mit einem Wert größer als hexadezimal 0xffff
eine spezielle Codierung erfordern, die sogenannte Surrogates nutzt. Mit diesem Wissen kann man sich dann eine Hilfsmethode toSurrogates()
und das korrespondierende Beispielprogramm wie folgt schreiben:
public static void main(final String[] args) { final String text = "Text Surr \u00B0 \u1801 \u25D0 \u2A0C \u83fb --- " + toSurrogates(0x1f605) + toSurrogates(0x1f310) + toSurrogates(0x1f575) + toSurrogates(0x1F917); System.out.println(text); } private static String toSurrogates(final int orig) { return new String(new char[]{Character.highSurrogate(orig), Character.lowSurrogate(orig)}); }
Führt man das korrigierte Programm aus, so erhält man – sofern es das Betriebssystem unterstützt – auf der Konsole eine korrekte Darstellung, wie es die folgende Abbildung zeigt.

Darstellung des Programms UNICODE8WITHSURROGATESEXAMPLE

Neben Änderungen an der Sprache bilden auch die Erweiterungen in diversen APIs einen Schwerpunkt. Fehlen darf hier natürlich auch nicht ein Kapitel über die fundamentalste Änderung in Java 9: Project Jigsaw. Auch fortgeschrittenere Themen wie Services und die Migration bestehender Applikationen werden besprochen. Da Java 9 auch einige Auswirkungen auf Build Tools und IDEs mit sich bringt, gibt ein Kapitel einen Überblick über den derzeitigen Stand zum Tooling rund um die neue Java-Version.
Hinterlasse einen Kommentar