Home Die Zeichensätze NeXTStep UTF-16
 KEYTAB
 Die Zeichensätze

UTF-8

Bei dem Zeichensatz "UTF-8" handelt es sich nicht um einen Zeichensatz, wie z.B. "Windows Codepage 1252", sondern vielmehr um eine Codierung von Unicode-Zeichen. Hierbei werden die wichigeren Zeichen (z.B. 0..9, A..Z, a..z) in einem Byte codiert, etwas weniger wichtigere Zeichen (z.B. ÄÖÜäöüß) in zwei Byte. Die Abstufung geht bis zu einer Codierung von 4 Byte.

Der von KEYTAB implementierte Algorithmus zur Umwandlung von Unicode in UTF-8 lautet:

Unicode 'unicode' zwischen
   $00..$7F: ein Byte
      'unicode'
  $80..$7FF: zwei Byte
      %11xx xxxx - Bit 11 bis Bit 6 von 'unicode'
      %10xx xxxx - Bit 5 bis Bit 0 von 'unicode'

$00 $7F 1 Byte
%0xxx xxxx Bit 6 bis Bit 0
$80 $7FF 2 Byte
%110x xxxx Bit 10 bis Bit 6
%10xx xxxx Bit 5 bis Bit 0
$800 $FFFF 3 Byte
%1110 xxxx Bit 15 bis Bit 12
%10xx xxxx Bit 11 bis Bit 6
%10xx xxxx Bit 5 bis Bit 0
$10000 $200000 4 Byte

bzw. im C-Source

   /* Zeichen unter 0x80 sind nicht codiert */
   if( lunicode < 0x80 )
   {
      string[0] = (char)(lunicode & 0x7Fl);
      used = 1;
   }
   else if( lunicode < 0x800 )
   {
      string[0] = 0xC0 | (char)((lunicode>>6) & 0x3F);
      string[1] = 0x80 | (char)(lunicode & 0x3F);
      used = 2;
   }
   else if( lunicode < 0x10000l )
   {
      string[0] = 0xE0 | (char)((lunicode>>12) & 0x3F);
      string[1] = 0x80 | (char)((lunicode>>6) & 0x3F);
      string[2] = 0x80 | (char)(lunicode & 0x3F);
      used = 3;
   }
   else if( lunicode < 0x200000l )
   {
      string[0] = 0xF0 | (char)((lunicode>>18) & 0x3F);
      string[1] = 0x80 | (char)((lunicode>>12) & 0x3F);
      string[2] = 0x80 | (char)((lunicode>>6) & 0x3F);
      string[3] = 0x80 | (char)(lunicode & 0x3F);
      used = 4;
   }

Copyright © Martin Elsässer (eMail-Adressen)
Letzte Aktualisierung am 12. Dezember 2006

Home Die Zeichensätze NeXTStep UTF-16