======================================================================

   Unicode und UTF-8


   Durch die 7-Bit Codierung von ASCII koennen nur wenige Zeichen abge-
   bildet werden. Dieses Problem wurde durch eine Erweiterung auf 8 Bit
   nur leicht entschaerft, und schuf gleichzeitig neue Probleme bei der
   Kompatibilitaet verschiedener Systeme welche noch bis heute auftreten.

   Durch die Einfuehrung von Unicode wurde ein Standard mit ueber einer
   Million Zeichen geschaffen. Diese Menge an Zeichen ist ausreichend
   fuer eine Vielzahl von Zeichen wie beispielsweise die griechischen
   Buchstaben, asiatische Schriftzeichen, Piktogramme, mathematische Sym-
   bole, Musiknoten und vieles mehr. Unicode wurde aufgrund der breiten
   Abdeckung auch als Universal Character Set (UCS) bezeichnet.
   
   Unicode ist mittlerweile weit verbreitet und der Standard von vielen
   Systemen. Ein Problem, welches Unicode selbst jedoch nicht loeste war
   die Kompatibilitaet zum weltweit akzeptierten ASCII-Standard. Unicode
   definiert momentan 21 Bits, was mit den 7 Bits von ASCII nicht verein-
   bar ist. Um diesem Problem entgegenzukommen wurde das Encoding UTF-8
   entworfen, welches ASCII aufwaertskompatibel zu Unicode macht.
   
   UTF-8 ist die Abkuerzung fuer 8-Bit-UCS-Transformation-Format und ist
   sowohl faehig, alle Zeichen des Unicodes darzustellen, als auch die
   7-Bit-ASCII-Zeichen ohne Konvertierung abzubilden. Die 7 Bits eines
   ASCII-Zeichens wurden in den gaengigen Systemen stets mit 8 Bits ge-
   speichert, wobei das fuehrende Bit mit 0 gesetzt war. UTF-8 hat diese
   Eigenschaft uebernommen und gleichzeitig definiert, dass bei Auftreten
   einer 1 beim fuehrenden Bit es sich nicht mehr um ein ASCII-Zeichen
   handelt, sondern um ein Unicode-Zeichen.
   
   Die nicht-ASCII-Zeichen werden bei UTF-8 mittels Hintereinanderreihung
   mehrerer Bytes realisiert, wobei das erste Byte eines Zeichens als das
   Start-Byte gilt. Je nachdem, wie die fuehrenden Bits des Start-Bytes
   gesetzt sind, koennen eine unterschiedliche Anzahl an Folge-Bytes hin-
   zukommen. Das Schema fuer die Umwandlung ist in folgender Tabelle dar-
   gestellt:
   
   +-------------------------------------+------------------------------+
   | 0xxxxxxx                            | ASCII-Zeichen                |
   | 110xxxxx 10xxxxxx                   | Unicode 0x00080 - 0x007ff    |
   | 1110xxxx 10xxxxxx 10xxxxxx          | Unicode 0x00800 - 0x0ffff    |
   | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | Unicode 0x10000 - 0x1ffff    |
   +-------------------------------------+------------------------------+
   
   Die x bezeichnen dabei beliebige Bits, welche bei der Umwandlung in
   Unicode direkt aneinandergereiht werden und so die Zeichen ergeben,
   wie sie in der rechten Spalte aufgelistet sind. Dabei ist jedoch zu
   beachten, dass niederwertige Zeichen theoretisch auf unterschiedliche
   Weise codiert werden koennten. Der UTF-8 Standard schreibt jedoch vor,
   dass nur die Codierung mit minimalem Platzverbrauch zulaessig ist.
   
   Die spezielle Codierung mit den fuehrenden Bits erlaubt es zudem, ein
   Byte direkt als Start- oder aber als ein Folge-Byte zu identifizieren.
   Dies ist insbesondere wichtig bei der Wiederherstellung von defekten
   Daten oder aber auch beim Zaehlen der Anzahl Zeichen in einem String.

   Mittels UTF-8 werden die in der westlichen Welt haeufig verwendeten
   Zeichen automatisch mit weniger Bytes gespeichert, was in kleineren
   Dateien resultiert. Der weitaus wichtigere Vorteil dieser Codierung
   ist jedoch, dass bestehende ASCII-Dateien direkt als UTF-8 Dateien in-
   terpretiert werden koennen. Aus diesem Grund hat sich UTF-8 weltweit
   verbreitet und verhalf indirekt auch zur Verbreitung von Unicode.

   ======================================================================
   ----------------------------------------------------------------------
                       (c) Tobias Stamm, manderby.com