|
Unicode
|
ASCII ist ein Zeichensatz mit 256 Zeichen (von denen 128 standardisiert und
die anderen 128 lokal flexibel definierbar sind...). Jedes Zeichen wird mit
genau einem Byte adressiert, so daß es also genau soviele Zeichen wie Byte-Werte
gibt. Aber in verschiedenen Schriften existieren verschiedene Zeichen - in
einigen Schriften beispielsweise deutsche Umlaute, in anderen irgendwelche
graphischen Sonderzeichen, in wieder anderen chinesische Zeichen usw. Man kann
einer Zeichenkette nicht ansehen, was sie bedeutet, weil sie in Abhängigkeit von
der verwendeten Schrift jeweils etwas beliebiges Anderes bedeuten kann (sofern
sie Zeichenwerte > 128 enthält).
Unicode ist ein Codierungssystem, welches zwei Bytes (!) pro Zeichen
verwendet. Damit sind pro Zeichensatz (!) nicht mehr 256, sondern 65536 Zeichen
verwendbar. Das ist für Schriften, die sehr viel mehr als 256 Zeichen enthalten
(beispielsweise die chinesische oder die japanischen), essentiell. Insbesondere
kann man sämtliche Zeichen, die bisher auf beliebig viele Schriftarten verteilt
waren, nun innerhalb einer einzigen Schriftart unterbringen - und ein
Zeichen-Code hat in jeder Unicode-Schrift immer dieselbe Bedeutung. (Bei
ASCII sind ja nicht mal die DOS- und die Windows-Variante zueinander kompatibel
- siehe deutsche Umlaute.)
Es bedeutet allerdings auch, daß jede Zeichenkette, die bisher mit jeweils einem
Byte pro Zeichen gespeichert wurde, nun mit zwei Byte pro Zeichen gespeichert
werden muß. Das ist eine ähnlich bahnbrechende Format-Änderung wie vor einigen
Jahren beim Jahr-2000-Datumsproblem (wo zweistellige Jahreszahlen nicht mehr für
vierstellige Werte ausreichten und alle Kleiner-Gleich-Operationen falsche Werte
zu liefern drohten).
Unicode ist meiner Meinung nach die logische Antwort bezüglich
Zeichendarstellung auf die Globalisierung der Weltwirtschaft: Unicode-Strings
können die Namen sämtlicher Kunden eines Weltkonzerns innerhalb einer
einheitlich formatierten Datenbasis darstellen - egal in welcher Kultur diese
Kunden leben und in welcher Schrift sie schreiben. Analog dazu können
Unicode-Strings die Namen sämtlicher im ed2k-Netzwerk existierenden Dateien
darstellen - wiederum ungeachtet der Kultur und Schrift, aus der diese Namen
stammen.
Die gesamte Behandlung von code-relevanten Zeichenketten (und das sind
sinnvollerweise alle Zeichenketten, die irgendwer irgendwo anzeigen will) ändert
sich also inkompatibel. Die Funktionen zum Vergleichen von Zeichenketten (substring-Erkennung
etc.) ändern sich ebenfalls (die alten Funktionen für 1-Byte-Codes würden für
Unicode-Strings falsche Ergebnisse liefern).
Alle Programme, die mit Unicode-tauglichen Zeichenketten arbeiten wollen, müssen
also die entsprechenden Zeichenketten-Verarbeitungsbibliotheken verwenden; dafür
müssen sie (geringfügig) umgeschrieben und anschließend neu übersetzt werden.
Bei modernen Betriebssystemen sind diese Bibliotheken bereits mit ausgeliefert
worden; bei älteren müssen sie nachinstalliert werden (dafür das Programm von
Microsoft).
Emule hat in der Version 0.44b von "alten" auf "Unicode-taugliche" Zeichenketten
umgestellt - deshalb laufen ältere Emule-Versionen auf alten Betriebssystemem
noch ohne diese neue Unicode-Bibliothek, neue aber nicht mehr (weil man
sinnvollerweise Bibliotheken, die auf "jedem" Rechner bereits vorhanden sind,
nicht ins Emule-Programm mit einbindet, sondern dynamisch dazu laden läßt -
sonst würde einerseits die Datei "emule.exe" unnötig aufgebläht und andererseits
jedes einzelne Unicode-taugliche Programm die Unicode-Routinen immer wieder in
den RAM laden, wo es doch ausreicht, eine Windows-DLL dafür ein einziges Mal in
den RAM zu laden). |