Hans Wittwer

Geschichten, die das Leben schrieb

Nachrichtentechnik

Unicode

Nachrichtentechnik - Unicode
← ANSI-Code UTF-8 Format →

Schlaue Köpfe wollten einen einzigen Zeichensatz für das ganze Universum bauen. Stolzer Ansatz, aber wie soll das gehen? Mehr Bits was sonst? Sie nannten den Zeichensatz sinnigerweise Unicode.

Die Kerle haben keine neuen Zeichen erfunden nur alle die sie finden konnten in einen einzigen Code gepackt. Wie viele Zeichen sind denn das? Angefangen haben sie mit zwei Byte pro Zeichen, das ergibt 216 = 65'536 Zeichen. Die ersten 128 Zeichen haben sie unverändert aus dem ASCII-Code übernommen. Die Erfinder haben alle anderen Zeichen anschliessend eingebaut.

65'536 Zeichen reichten nicht für das ganze Universum. Menschen aus fernen Ländern haben reklamiert und wollten ihre Hieroglyphen auch dabeihaben. Emoticons und ähnliche Symbole wollten auch dabei sein.

Die findigen Köpfe haben weiter gegrübelt. Den 16 Bit (65'536 Zeichen) sagten sie "Ebene". Mit 5 Bit vor der Ebene haben sie 25 = 32 Ebenen erfunden. Von diesen 32 Ebenen sind 17 vorgesehen und 6 heute verwendet. Ein Unicode-Zeichen ist demnach 5 + 16 = 21 Byte lang. Und weil 17 Ebenen vorgesehen wurden, sind 17 * 65'536 = 1'114'112 Zeichen möglich. Warum nur 5 Bit für die Ebenen Nummer? Das wird später beim UFT-8-Format klar.

Binär / Dual Dezimal Hexadezimal Klartext
00000 00000000 00000000 0 0 Tiefstes Unicode Zeichen
00000 00000000 00000000 0 0 Erstes Zeichen in Ebene 0
00000 11111111 11111111 65'535 FFFF Letztes Zeichen in Ebene 0
01001 00001100 01110011 593'011 9 0C73 3'187tes Zeichen in Ebene 9
10000 11111111 11111111 1'114'111 10 FFFF Letztes Zeichen in Ebene 17
10000 11111111 11111111 1'114'111 10 FFFF Höchstes Unicode-Zeichen

Beispiel: A = ASCII 1000001 = Unicode 00000 00000000 01000001

Heute umfasst der Unicode also 17 Ebenen à 65'536 Zeichen. 17 x 2 Byte = 17 * 216 = 17 * 65'536 = 1'114'112 Zeichen und es hätte noch Platz für weitere 15 Ebenen. Wenn das nicht reichen sollte, treten die findigen Köpfe mit Garantie in Aktion und werden eine Lösung finden. Eventuell sind sie schon dran. Die 1'114'112 Unicode-Zeichen liste ich nicht auf, sonst bist Du lange am Blättern. Schaue im Internet bei Unicode rein, wenn Du's wissen möchtest.

Beispiele von gängigen Unicode-Zeichen umgesetzt in das UTF-8-Format:
Details zum UTF-8-Format folgen.

Zeichen Unicode UTF-8
  Binär Dez Hex Binär Dez Hex
A 00000000 01000001 65 41 01000001 65 41
£ 00000000 10100011 163 A3 11000010 10100011 49827 C2A3
¤ 00000000 10100100 164 A4 11000010 10100100 49828 C2A4
© 00000000 10101001 169 A9 11000010 10101001 49833 C2A9
® 00000000 10101110 174 AE 11000010 10101110 49838 C2AE
° 00000000 10110000 176 B0 11000010 10110000 49840 C2B0
² 00000000 10110010 178 B2 11000010 10110010 49842 C2B2
³ 00000000 10110011 179 B3 11000010 10110011 49843 C2B3
´ 00000000 10110100 180 B4 11000010 10110100 49844 C2B4
µ 00000000 10110101 181 B5 11000010 10110101 49845 C2B5
¼ 00000000 10111100 188 BC 11000010 10111100 49852 C2BC
½ 00000000 10111101 189 BD 11000010 10111101 49853 C2BD
¾ 00000000 10111110 190 BE 11000010 10111110 49854 C2BE
± 00000000 10110001 177 B1 11000010 10110001 49841 C2B1
µ 00000000 10110101 181 B5 11000010 10110101 49845 C2B5
· 00000000 10110111 183 B7 11000010 10110111 49847 C2B7
Å 00000000 11000101 197 C5 11000011 10000101 50053 C385
Ç 00000000 11000111 199 C7 11000011 10000111 50055 C387
× 00000000 11010111 215 D7 11000011 10010111 50071 C397
Ø 00000000 11011000 216 D8 11000011 10011000 50072 C398
ñ 00000000 11110001 241 F1 11000011 10110001 50097 C3B1
÷ 00000000 11110111 247 F7 11000011 10110111 50103 C3B7
ø 00000000 11111000 248 F8 11000011 10111000 50104 C3B8
Ω 00000011 10101001 937 3A9 11001110 10101001 52905 CEA9
λ 00000011 10111011 955 3BB 11001110 10111011 52923 CEBB
φ 00000011 11000110 966 3C6 11001111 10000110 53126 CF86
ϖ 00000011 11010110 982 3D6 11001111 10010110 53142 CF96
00100000 00100000 8224 2020 11100010 10000000 10100000 57984 E280
00100000 00100110 8230 2026 11100010 10000000 10100110 57984 E280
00100000 00110000 8240 2030 11100010 10000000 10110000 57984 E280
00100000 10101100 8364 20AC 11100010 10000010 10101100 57986 E282
00100010 00000101 8709 2205 11100010 10001000 10000101 57992 E288
00100010 00010001 8721 2211 11100010 10001000 10010001 57992 E288
00100010 00011010 8730 221A 11100010 10001000 10011010 57992 E288
00100010 00101010 8746 222A 11100010 10001000 10101010 57992 E288
00100010 00101011 8747 222B 11100010 10001000 10101011 57992 E288
00100010 01000101 8773 2245 11100010 10001001 10000101 57993 E289
00100010 01100000 8800 2260 11100010 10001001 10100000 57993 E289
00100010 01100100 8804 2264 11100010 10001001 10100100 57993 E289
00100010 01100101 8805 2265 11100010 10001001 10100101 57993 E289

Die Knacknuss war wie man die Unicode-Zeichen in eine Datei packt. Zwei verschiedene Dateien (1-Byte-ASCII und 3-Byte-Unicode) lagen nahe. Zwei Dateien wollte man nicht. Die reine ASCII-Datei wollte man beibehalten. Wie gestaltet man nun eine Datei damit die 1-Byte gewohnten Systeme unberührt weiterarbeiten können alle Unicode-Zeichen trotzdem drin sein können und die Datei schlank bleibt?

Die geniale Lösung heisst UTF-8 Format.

Ja ich weiss es gibt noch andere Formate. UTF‑8 hat es mir angetan, weil ich im Internet "zu Hause" bin. Mich interessiert das, was ich selbst angwende und als praktisch empfinde.

← ANSI-Code UTF-8 Format →
Nachrichtentechnik - Unicode