Dr. Andreas Borchert Institut für Angewandte Informationsverarbeitung 14. November 2006
Christian Ehrhardt Blatt 4


Uni Logo



Allgemeine Informatik III (WS 2006/2007)


Abgabetermin 21.Nov 2006

Unicode und UTF-8

ASCII

Bisher wurden Zeichen immer mit Hilfe des ASCII-Codes kodiert. Dabei wird eine Zuordnung zwischen den Zahlen 0 bis 127 (oder 255) und dem zugehörigen Buchstaben getroffen. So entspricht etwa die Zahl 65 dem Buchstaben A und 32 dem Leerzeichen. Jedes Zeichen eines Textes wird dabei einfach als eine 8-Bit Zahl (char bzw. unsigned char in C) abgespeichert.

Unicode

Das ganze geht solange gut, bis eine Anwendung mehr als 128 (oder 256) verschiedene Zeichen verwenden will. Eventuell auch schon früher, wenn die benötigten Zeichen im ASCII-Code nicht vorkommen. Als Lösung für dieses Problem wurde der sogenannte Unicode erfunden. Dabei wird jedem nur denkbaren Zeichen (von lateinischen über griechische bin hin zu chinesischen) ein eindeutiger Integerwert zugeordnet.

UTF-8

Das Problem bei dieser Lösung ist, daß die allermeisten dieser Integerwerte nicht mehr in einem Byte (8-Bit) dargestellt werden können. Zeichen, denen größere Zahlen zugeordnet sind, müssen also mit mehr als einem Byte dargestellt werden. Die vermutlich am meisten verwendete Lösung für dieses Problem ist die UTF-8 Kodierung. Dabei werden zwischen 1 und 4 Byte zur Darstellung einer Integerzahl bzw. eines Unicode-Zeichens verwendet. Im Detail funktioniert das wie folgt:

Beispiele

Hier einige Beispiele für korrekte UTF-8 Kodierungen. Die ``Nutzdaten'' sind dabei fett gedruckt.
Integerwert Binärdarstellung Anzahl Bytes UTF-8 kodiert (binär)
100 1100100 1 01100100
1000 1111101000 2 11001111 10101000
4000 111110100000 3 11100000 10111110 10100000
10000 10011100010000 3 11100010 10011100 10010000

Aufgabe (10 Punkte)

Schreiben Sie ein Programm, das ein Folge von (menschenlesbaren) Integerzahlen zwischen 0 und $2^{21}-1$, wie sie zum Beispiel über die Tastatur eingegeben werden können, in UTF-8 kodiert. Dabei soll jede Zahl genau einem UTF-8 kodierten Unicode-Zeichen entsprechen.
Schreiben Sei ein weiteres Programm, das die Konvertierung in umgekehrter Richtung durchführt.

Hinweise



Christian Ehrhardt 2006-11-14