Hallo,
Durch die Einführung von Unicode 5.1 sind 1.114.112 Zeichen
standardisiert worden. Um all diese Zeichen zu kodieren werden
4 Bytes gebraucht. Ist es nicht möglich, diese Zeichen nur mit
3 Bytes zu kodieren, weil 3 Bytes 24 Bits machen. Daraus
ergeben sich 2^24 = 16.777.216 Möglichkeiten. So könnte man
doch 1 Byte sparen… Aber wieso werden 4 Bytes genommen?
Vergiss nicht, dass
- die Zeichen nicht am Stück liegen, sondern es zum Teil Lücken zwischen den Codepoints gibt
- Unicode keine Zeichenkodierung ist, sondern es verschiedene Kodierungen gibt, die je nach Anwendungsfall praktisch sind:
UTF-8 ist dann praktisch, wenn man ASCII-Kompatibel sein will solange keine Codepoints > 128 auftauchen. Ausserdem ist es sehr platzsparend wenn nur wenige Codepoints > 128 in einem Text sind (typsicher deutscher Text z.B.)
UTF-16 ist sehr praktisch, weil man für fast alle Fälle, die tatsächlich in der freien Wildbahn auftauchen nur zwei Byte braucht um beliebige Zeichen zu kodieren (Ausser man will gerade den Klingonen einen Nachricht schreiben). Das Gleiche gilt für UCS-2.
UTF-32 ist praktisch wenn man immer die gleiche Byte-Breite für jeden Codepoint benutzen will.
Jetzt könnte man anfangen ein UTF-24 zu definieren, aber wegen der erwähnten Registergrößen, die immer Zweierpotenzen sind, wird das kaum einen realen Vorteil gegenüber UTF-32 bieten (Bei der Speicherung kann man ja immer noch komprimieren).
Grüße,
Moritz