Abteilung Informatik, Fach Programmieren FHZ Hochschule für Technik+Architektur Luzern UNICODE (16-BIT-ZEICHENCODE) UNICODE (16-BIT-ZEICHENCODE) Der Unicode macht die Zeichen aller auf der Welt bekannten Sprachen, Satzzeichen und mathematischen Zeichen in einem Zeichensatz verfügbar. Die 65'536 darstellbaren Zeichen sind in Zeichengruppen unterteilt: 16-Bit-Code Zeichengruppe 0000 - 007F ASCII (7-Bit-Standard) 0080 - 00FF Latin 1 (ISO 8859-1) 0100 - 017F European Latin 0180 - 01FF Extended Latin 0250 - 02AF Standardmässige Lautschriftzeichen (vgl. 1 Laut = 1 Zeichen) 02B0 - 02FF Veränderte Zeichen 0300 - 036F Generische diakritische Zeichen (vgl. über und unter Buchstaben) 0370 - 03FF Griechisch 0400 - 04FF Kyrillisch 0530 - 058F Armenisch 0590 - 05FF Hebräisch 0600 - 06FF Arabisch ... Java codiert Textzeichen konsequent in Unicode. Um vorhandene 7/8-Bit-Editoren und Text-Dateiformate verwenden zu können, definiert Java eine sogenannte Unicode-Escapesequenz. Diese hat die Form: \uhhhh Unicode.doc, V24 © H. Diethelm z.B. \u004A für 'J' Seite 1/2 FHZ Hochschule für Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren UNICODE (16-BIT-ZEICHENCODE) Neben der Unicode-Escapesequenz von Java gibt es noch andere Brücken zwischen Unicode und der "8-Bit-Welt". Eine davon ist die weitverbreitete UTF8-Codierung (Unicode Transformation Format). Diese wird auch von den Java-Klassenbibliotheken unterstützt. Mit Hilfe von UTF8 können Bitmuster bis 31 Bits Länge mit einer Folge von maximal 6 Bytes übertragen werden. Für Unicode codierte Zeichen genügen maximal 3 Bytes, wobei für Zeichen \u0001 bis \u007F (also ASCII 7-Bit-Standrad) ein Byte genügt! Da diese Zeichen in den meisten Texten am häufigsten vorkommen, spart eine UTF8-Übertragung oder Speicherung bis zu 50% Platz. Folgende Tabelle illustriert das Prinzip der UTF8-Codierung: Fall 1. Byte # freie Bits max. reicht für 1 Byte: 0xxxxxxx 7 007F ASCII 7-Bit 2 Bytes: 110xxxxx 5 + 1*6 = 11 07FF Latin 1, ... 3 Bytes: 1110xxxx 4 + 2*6 = 16 FFFF Unicode 4 Bytes: 11110xxx 3 + 3*6 = 21 1F FFFF ... 5 Bytes: 111110xx 2 + 4*6 = 26 3FF FFFF ... 6 Bytes: 1111110x 1 + 5*6 = 31 7FFF FFFF ... 2. bis 6. Byte # freie Bits 10xxxxxx 6 Ist in einem Byte das Bit 7 gleich Null, so stellt dies eine Folge von nur einem Byte dar. Ist das Bit 7 gleich Eins, so ist dieses Byte Teil einer Folge von 2 bis 6 Bytes. Die Anzahl der Bytes entspricht der Anzahl der zusammenhängenden Einsen bis zur ersten Null. Die Nachfolge-Bytes beginnen eindeutig mit dem Muster 10. Java codiert \u0000 speziell mit 2 Bytes, nämlich 11000000 10000000. Unicode.doc, V24 © H. Diethelm Seite 2/2