Von ASCII nach Unicode: Internationalisierung von Benutzeroberflächen

Linux als Betriebssystem in eingebetteten Computern erlaubt das unkomplizierte Anschließen großer Displays sowie passender Touchscreens. Intuitive Bedienkonzepte senken die Wahrscheinlichkeit von Fehlbedienungen. Durch die freie Gestaltbarkeit des Bildschirminhaltes als grafisches User Interface (GUI) kann die Aufmerksamkeit des Bedieners auf wichtige Informationen gelenkt werden, die er dann in seiner Sprache lesen kann. Eine Herausforderung für die GUI-Programmierung sind dabei die nicht-lateinischen Schriftzeichen. Mit den TrueTypeFonts existiert jedoch ein Format für Schriften, in dem alle Schriftzeichen der gebräuchlichen Sprachen dargestellt werden können. Der Zugriff auf solche Schriften ist mit der Library \’freetype2\‘ leicht möglich: Ergänzt um \’freetype2\‘ kann ein GUI-Framework auch kyrillische, griechische, hebräische, arabische und fernöstliche Texte darstellen.

Aussehen von Schriftzeichen

Schriftzeichen werden auf zwei Arten beschrieben: Eine Pixelschriftart beschreibt pro Buchstaben ein Feld von Bildpunkten (Bitmap). Zur Darstellung wird das Bitmap lediglich auf den Bildschirm kopiert. Schwierig wird es, wenn die Schrift in verschiedenen Größen dargestellt werden soll: Das Bitmap muss dann um Bildpunkte erweitert oder gekürzt werden. Die Folge ist ein unansehnliches Schriftbild. Vektorschriftarten beschreiben jeden Buchstaben mit Vektoren. Die Darstellung ist aufwendiger, da berechnet werden muss, welche Pixel für den jeweiligen Buchstaben eingefärbt werden müssen. Allerdings lässt sich die Schriftgröße leicht anpassen: Die Vektoren werden entsprechend skaliert, die Berechnung der Pixel erneut durchgeführt. Der populärste Schriftartentyp ist TrueTypeFont (TTF), der in Dateien mit der Endung .ttf gespeichert wird. Diese Vektorschriftart ist auf PCs sehr häufig anzutreffen. Viele TTF-Schriftarten können kostenlos aus dem Internet bezogen und ohne Beschränkung weitergegeben werden.

Kodierung von Text

Solange ein Text nicht angezeigt wird, liegt er meist als Zeichenkette im Speicher vor. Diese kann unterschiedlich kodiert sein. Der bekannteste Standard ist ASCII. Er definiert eine Zuordnung von Bytes zu lateinischen Buchstaben. Ein Byte mit dem Wert 0x47 ist ein großes \’G\‘. Die Zeichenfolge \’Go\‘ wird mit 0x47 0x6f 0x00 kodiert und abgeschlossen. Der ASCII-Standard definiert lediglich die Zeichen von 0x01 bis 0x7f, also den Raum der ersten sieben Bits. Die Werte von 0x80 bis 0xff werden für Erweiterungen genutzt. Diese Erweiterungen und ihre genaue Bedeutung werden im Vorfeld vereinbart und später entsprechend interpretiert. Leider werden Vereinbarungen häufig falsch oder variierend getroffen, was zu den bekannten \’kaputten\‘ Sonderzeichen führt. Abgesehen davon sind ASCII-kodierte Zeichenketten auf 255 verschiedene Zeichen beschränkt. Für fernöstliche Sprachen reicht das bei Weitem nicht aus.

Unicode

Nahezu alle Zeichen sämtlicher Sprachen der Welt werden mit Unicode abgedeckt. Für jedes Zeichen werden zwei oder sogar vier Byte verwendet. Unicode ist, soweit möglich, kompatibel zu ASCII. Der ASCII-Code um eine führende Null ergänzt ergibt den zugehörigen Unicodewert. Das große \’G\‘ entspricht 0x0047. Die Zeichenfolge \’Go\‘ wird mit 0x0047 0x006f 0x0000 kodiert und abgeschlossen, wobei hier jede hexadezimale Zahl zwei Byte lang ist. In Texten, die von lateinischen Buchstaben dominiert werden, führen unzählige Nullen, die jedem Buchstaben vorangestellt werden, zu einer Verdopplung der Datenmenge. Um Speicherplatz zu sparen, wurde UTF-8 entwi­ckelt. Die ASCII-Codierung für die Werte 0x01 bis 0x7f wird beibehalten. Nullbytes werden nicht eingefügt. Bytes mit Werten zwischen 0x80 und 0xff zeigen an, dass die nachfolgenden Bytes noch zu diesem Zeichen gehören. Das erste Byte und die nachfolgenden werden dann zu einem Unicodewert dekodiert. UTF-8 ist somit eine Obermenge von ASCII. Die Länge der Zeichenkette ist durch Suchen nach dem Nullbyte einfach zu bestimmen. Die Anzahl der Zeichen in der Zeichenkette kann jedoch nur durch eine genaue Analyse der Zeichen ermittelt werden. Moderne Editoren können UTF-8-Textdateien problemlos anzeigen, sofern die notwendigen Schriftarten installiert sind. Auch moderne Compiler \’verstehen\‘ UTF-8 in Zeichenketten.

Seiten: 1 2 3