Umlaute und Sonderzeichen in Java

Wer schon mal in Java Programme mit Textausgabe programmiert hat, wird feststellen, dass es trotz der Betriebssystemunabhängigkeit von Java Probleme mit der Darstellung von Sonderzeichen auf verschiedenen Betriebssystemen gibt. Daher sollte man Umlaute und Sonderzeichen immer durch Unicode-Escapes im Quellcode ersetzten. Java arbeitet mit 16-Bit Unicodes (UTF-16).

Beispiel:

System.out.println(„\u00C4sthetisches Fr\u00FChst\u00FCcksfernsehen.“);

Übersicht der wichtigsten Unicode-Maskierungen für Java:

Unicode-Escapes Sonderzeichen
\u00A1 ¡
\u00A2 ¢
\u00A3 £
\u00A4 ¤
\u00A5 ¥
\u00A6 ¦
\u00A7 §
\u00A8 ¨
\u00A9 ©
\u00AA ª
\u00AB «
\u00AC ¬
\u00AD ­
\u00AE ®
\u00AF ¯
\u00B0 °
\u00B1 ±
\u00B2 ²
\u00B3 ³
\u00B4 ´
\u00B5 µ
\u00B6
\u00B7 ·
\u00B8 ¸
\u00B9 ¹
\u00BA º
\u00BB »
\u00BC ¼
\u00BD ½
\u00BE ¾
\u00BF ¿
\u00C0 À
\u00C1 Á
\u00C2 Â
\u00C3 Ã
\u00C4 Ä
\u00C5 Å
\u00C6 Æ
\u00C7 Ç
\u00C8 È
\u00C9 É
\u00CA Ê
\u00CB Ë
\u00CC Ì
\u00CD Í
\u00CE Î
\u00CF Ï
\u00D0 Ð
\u00D1 Ñ
\u00D2 Ò
\u00D3 Ó
\u00D4 Ô
\u00D5 Õ
\u00D6 Ö
\u00D7 ×
\u00D8 Ø
\u00D9 Ù
\u00DA Ú
\u00DB Û
\u00DC Ü
\u00DD Ý
\u00DE Þ
\u00DF ß
\u00E0 à
\u00E1 á
\u00E2 â
\u00E3 ã
\u00E4 ä
\u00E5 å
\u00E6 æ
\u00E7 ç
\u00E8 è
\u00E9 é
\u00EA ê
\u00EB ë
\u00EC ì
\u00ED í
\u00EE î
\u00EF ï
\u00F0 ð
\u00F1 ñ
\u00F2 ò
\u00F3 ó
\u00F4 ô
\u00F5 õ
\u00F6 ö
\u00F7 ÷
\u00F8 ø
\u00F9 ù
\u00FA ú
\u00FB û
\u00FC ü
\u00FD ý
\u00FE þ
\u00FF ÿ

Hinweis: Die Unicodes können unter Windows XP auch mit der Zeichentabelle (zu erreichen über Start -> Ausführen -> charmap) gefunden werden.

2 Gedanken zu „Umlaute und Sonderzeichen in Java“

  1. Du nennst die „\u“-Umschrift „Unicode-Escape“. Das ist nicht korrekt. Java arbeitet intern in der Tat mit UTF-16 und die „\u“-Schreibweise kodiert jeweils einzelne UTF-16-Codeunits. Das ist kein Unterschied für alle Unicode-Zeichen, die sich in 16 Bit darstellen lassen, also mit 4 Hex-Zeichen, also die sogenannte „Basic Multilingual Plane“. Unicode verwendet aber mittlerweile bis zu 21 Bit für ein Zeichen. Diese werden in UTF-16 in zwei sogenannten Surrogaten ausgedrückt, und diese müssen einzeln in der \u-Umschreibung angegeben werden.

    Beispiel: Der Violinschlüssel ist das Unicode-Zeichen mit der Kodierung 0x1D11E. In UTF-16 wird das in den zwei Surrogaten 0xD834 und 0xDD1E dargestellt. In Java-Umschrift wird der Violinschlüssel also als „\ud834\udd1e“ dargestellt – und nicht, wie man vielleicht denken könnte, als „\u1d11e“.

    Diese ganzen Unterscheidungen waren 2009, als dein Artikel entstanden ist, noch nicht so wichtig, weil Zeichen oberhalb von 0xffff noch keine große Rolle spielten und die Problematik im ganzen Java-Universum wohl noch nicht vollständig durchdrungen war. Als Java 1992 bis 1995 konzipiert wurde, gab es erst Unicode 1.0 mit maximal 16 Bit breiten Zeichen – da war UTF-16 die natürliche Darstellung. Die Erweiterung auf 21 Bit kam erst 1996 mit Unicode 2.0 – und damit auch die Notwendigkeit, UTF-16 über die Surrogatschreibweise kompatibel zu erweitern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.