Was ist der Unterschied zwischen ASCII- und Unicode-Text?
ASCII und Unicode sind beide Standards, die sich auf die digitale Darstellung von Text beziehen, insbesondere auf Zeichen, aus denen Text besteht. Die beiden Standards unterscheiden sich jedoch erheblich, wobei viele Eigenschaften ihre jeweilige Erstellungsreihenfolge widerspiegeln.
Amerika gegen das Universum
Es überrascht nicht, dass der amerikanische Standardcode für den Informationsaustausch (ASCII) ein amerikanisches Publikum anspricht, das im englischen Alphabet schreibt. Es handelt sich um Buchstaben ohne Akzent wie AZ und az sowie eine kleine Anzahl von Satzzeichen und Steuerzeichen.
Insbesondere gibt es keine Möglichkeit, Lehnwörter darzustellen, die aus anderen Sprachen übernommen wurden, z. B. Café in ASCII, ohne sie durch Ersetzen von Zeichen mit Akzent (z. B. Café ) zu anglisieren. Lokalisierte ASCII-Erweiterungen wurden entwickelt, um den Anforderungen verschiedener Sprachen gerecht zu werden. Diese Bemühungen erschwerten jedoch die Interoperabilität und dehnten die Fähigkeiten von ASCII deutlich aus.
Im Gegensatz dazu liegt der Universal Coded Character Set (Unicode) am entgegengesetzten Ende der Ambitionsskala. Unicode versucht, so viele Schriftsysteme der Welt wie möglich zu bedienen, soweit es alte Sprachen und die beliebtesten Ausdruckssymbole aller, Emoji, abdeckt.
Zeichensatz oder Zeichenkodierung?
In einfachen Worten ist ein Zeichensatz eine Auswahl von Zeichen (z. B. AZ), während eine Zeichenkodierung eine Zuordnung zwischen einem Zeichensatz und einem Wert ist, der digital dargestellt werden kann (z. B. A = 1, B = 2).
Der ASCII-Standard ist effektiv beides: Er definiert den Zeichensatz, den er darstellt, und eine Methode zum Zuordnen jedes Zeichens zu einem numerischen Wert.
Im Gegensatz dazu wird das Wort Unicode in verschiedenen Kontexten verwendet, um verschiedene Dinge zu bedeuten. Sie können es sich wie ASCII als einen umfassenden Begriff vorstellen, der sich auf einen Zeichensatz und eine Reihe von Codierungen bezieht. Da es jedoch mehrere Codierungen gibt, bezieht sich der Begriff Unicode häufig auf den gesamten Zeichensatz und nicht auf die Zuordnung.
Größe
Unicode repräsentiert aufgrund seines Umfangs weit mehr Zeichen als ASCII. Standard-ASCII verwendet einen 7-Bit-Bereich, um 128 verschiedene Zeichen zu codieren. Unicode hingegen ist so groß, dass wir eine andere Terminologie verwenden müssen, um darüber zu sprechen!
Unicode bietet Platz für 1.111.998 adressierbare Codepunkte. Ein Codepunkt entspricht in etwa einem Platz, der für ein Zeichen reserviert ist, aber die Situation ist viel komplizierter, wenn Sie sich mit den Details befassen!
Ein nützlicherer Vergleich ist, wie viele Skripte (oder Schreibsysteme) derzeit unterstützt werden. Natürlich behandelt ASCII nur das englische Alphabet, im Wesentlichen die lateinische oder römische Schrift. Die 2020 produzierte Version von Unicode geht noch viel weiter: Sie unterstützt insgesamt 154 Skripte.
Lager
Der 7-Bit-Bereich von ASCII bedeutet, dass jedes Zeichen in einem einzelnen 8-Bit-Byte gespeichert ist. Das Ersatzbit wird in Standard-ASCII nicht verwendet. Dies macht Größenberechnungen trivial: Die Länge des Texts in Zeichen entspricht der Größe der Datei in Bytes.
Sie können dies mit der folgenden Folge von Bash-Befehlen bestätigen. Zuerst erstellen wir eine Datei mit 12 Textbuchstaben:
$ echo -n 'Hello, world' > foo
Um zu überprüfen, ob der Text in der ASCII-Codierung enthalten ist, können Sie den Befehl file verwenden :
$ file foo
foo: ASCII text, with no line terminators
Um die genaue Anzahl der Bytes zu ermitteln, die die Datei belegt, verwenden wir den Befehl stat :
$ stat -f%z foo
12
Da der Unicode-Standard einen weitaus größeren Zeichenbereich behandelt, nimmt eine Unicode-Datei natürlich mehr Speicherplatz ein. Wie viel genau hängt von der Kodierung ab.
Wenn Sie denselben Befehlssatz wie zuvor mit einem Zeichen wiederholen, das in ASCII nicht dargestellt werden kann, erhalten Sie Folgendes:
$ echo -n '€' > foo
$ file foo
foo: UTF-8 Unicode text, with no line terminators
$ stat -f%z foo
3
Dieses einzelne Zeichen belegt 3 Bytes in einer Unicode-Datei. Beachten Sie, dass bash automatisch eine UTF-8-Datei erstellt hat, da eine ASCII-Datei das ausgewählte Zeichen (€) nicht speichern kann. UTF-8 ist bei weitem die häufigste Zeichencodierung für Unicode. UTF-16 und UTF-32 sind zwei alternative Codierungen, die jedoch weitaus weniger verwendet werden.
UTF-8 ist eine Codierung mit variabler Breite, dh es werden unterschiedliche Speichermengen für unterschiedliche Codepunkte verwendet. Jeder Codepunkt belegt zwischen einem und vier Bytes, mit der Absicht, dass häufigere Zeichen weniger Speicherplatz benötigen und eine Art integrierte Komprimierung bieten. Der Nachteil besteht darin, dass das Bestimmen der Längen- oder Größenanforderungen eines bestimmten Textabschnitts viel komplizierter wird.
ASCII ist Unicode, aber Unicode ist nicht ASCII
Aus Gründen der Abwärtskompatibilität repräsentieren die ersten 128 Unicode-Codepunkte die entsprechenden ASCII-Zeichen. Da UTF-8 jedes dieser Zeichen mit einem einzelnen Byte codiert, ist jeder ASCII-Text auch ein UTF-8-Text. Unicode ist eine Obermenge von ASCII.
Wie oben gezeigt, können viele Unicode-Dateien jedoch nicht in einem ASCII-Kontext verwendet werden. Jedes Zeichen, das außerhalb der Grenzen liegt, wird auf unerwartete Weise angezeigt, häufig mit ersetzten Zeichen, die sich vollständig von den beabsichtigten unterscheiden.
Moderne Nutzung
Für die meisten Zwecke wird ASCII weitgehend als Legacy-Standard angesehen. Selbst in Situationen, in denen nur das lateinische Skript unterstützt wird, in denen beispielsweise die vollständige Unterstützung der Komplexität von Unicode nicht erforderlich ist, ist es normalerweise bequemer, UTF-8 zu verwenden und die ASCII-Kompatibilität zu nutzen.
Insbesondere sollten Webseiten mit UTF-8 gespeichert und übertragen werden, was die Standardeinstellung für HTML5 ist. Dies steht im Gegensatz zu dem früheren Web, das sich standardmäßig mit ASCII befasste, bevor es durch Latein 1 ersetzt wurde.
Ein Standard, der sich ändert
Die letzte Überarbeitung von ASCII fand 1986 statt.
Im Gegensatz dazu wird Unicode weiterhin jährlich aktualisiert. Regelmäßig werden neue Skripte, Zeichen und insbesondere neue Emoji hinzugefügt. Wenn nur ein kleiner Teil davon zugewiesen wird, wird der gesamte Zeichensatz auf absehbare Zeit wahrscheinlich wachsen und wachsen.
ASCII versus Unicode
ASCII hat seinen Zweck viele Jahrzehnte lang erfüllt, aber Unicode hat es nun effektiv für alle praktischen Zwecke außer für Legacy-Systeme ersetzt. Unicode ist größer und daher ausdrucksvoller. Es stellt eine weltweite Zusammenarbeit dar und bietet eine weitaus größere Flexibilität, wenn auch auf Kosten einer gewissen Komplexität.