hi Marcel
unicode ist eine sammlung an standards, wie verschiedene zeichen binär abgebildet werden. utf ist eine teilmenge dieser standards, utf-8 ist z.b. eine spezielle ausprägung.
bei unicode gibt es mehrere verschiedene codierungstechniken - je nachdem, welche zeichen man häufiger braucht, wird man sich den jeweiligen standard hernehmen. beispiele:
der im java verwendete unicode-satz verwendet fix zwei byte (16 bit) zur darstellung von zeichen und kann damit die wichtigsten zeichensätze, die zur zeit verwendet werden, abbilden. es fehlen allerdings etliche zeichen v.a. aus dem asiatischen raum.
vorteil: einheitlicher zeichensatz, der „im westen“ praktisch alles abdeckt, was so im normalen geschäftsleben an zeichen daherkommt.
nachteil: man benötigt immer 2 byte pro zeichen, d.h. textdateien werden beim umstieg auf diesen code automatisch doppelt so gross.
utf-8 ist eine „optimierung“ vor allem für systeme, die „im westen“ laufen. hintergrund ist, dass die ersten 127 zeichen des 16-bit-unicode-satzes dem ansi-zeichensatz entspricht. man definiert also einen zeichensatz mit variabler bitlänge. die längen können 8, 16, 24 und 32 bit sein (also immer volle byte). wie viele bytes kommen, erkennt das system aufgrund der ersten bits des jeweiligen ersten bytes (also eigentlich das 8. bit - oder besser gesagt, das äusserst linke). ist das erste bit „0“, so weiss das system, dass das zeichen ein ein-byte-zeichen ist und dem ansi-code entspricht. beginn das erste byte mit „110“, so weiss das system, dass noch ein weiters byte folgt. bei „1110“ folgen zwei bytes usw. die folgebytes beginnen immer mit „10“.
vorteil: hantiert man viel mit texten, die hauptsächlich aus ansi-zeichen bestehen, braucht man weniger platz als für 16-bit-unicode (im optimalfall genau die hälfte). nur für seltener benötigte zeichen braucht man mehr bytes.
nachteil: textfelder brauchen je nach verwendeten zeichen unterschiedlich viel speicherplatz. ein feld, dass max. 10 zeichen aufnimmt, braucht zwischen 10 und 40 byte speicher (16-bit-unicode braucht immer 20 byte). ist z.b. blöd, wenn man platz für 100 zeichen reserviern muss und zum programmierzeitpunkt nicht wiess, wieviel speicher tatsächlich gebraucht werden.
utf-8 hat sich desshalb in unserem bereich durchgesetzt, da die meisten anwendungen tatsächlich mit ansi-zeichen auskommen. selbst in der deutschen sprache sind umlaute nicht so häufig (brauchen 2 bytes), als dass sich der 16-bit-unicode auszahlen würde. wenn man nun viel mit textdateien hantiert, ist die speicherplatzersparnis doch enorm (bis zu 50 % eben).
im asiatischen raum wird niemand, der halbwegs alle tassen im schrank hat, freiwillig auf utf-8 umsteigen.
alles klar?
erwin