Alle Zeichen in ASCII können mit UTF-8 ohne Speichererweiterung codiert werden (beides erfordert ein Byte Speicherplatz).
UTF-8 bietet den zusätzlichen Vorteil der Zeichenunterstützung über "ASCII-Zeichen" hinaus. Wenn dies der Fall ist, warum wählen wir dann jemals eine ASCII-Codierung anstelle von UTF-8?
Gibt es einen Anwendungsfall, in dem wir ASCII anstelle von UTF-8 wählen?
character-encoding
utf-8
ascii
Pacerier
quelle
quelle
Antworten:
In einigen Fällen kann der Zugriff auf einzelne Zeichen beschleunigt werden. Stellen Sie sich einen
str='ABC'
in UTF8 und in ASCII codierten String vor (vorausgesetzt, die Sprache / der Compiler / die Datenbank kennen sich mit Codierung aus).Um
C
mit dem Array-Zugriffsoperator, der in vielen Programmiersprachen verwendet wird, auf das dritte ( ) Zeichen aus dieser Zeichenfolge zuzugreifen, müssen Sie Folgendes tunc = str[2]
.Wenn die Zeichenfolge nun ASCII-codiert ist, müssen wir nur das dritte Byte aus der Zeichenfolge abrufen.
Wenn die Zeichenfolge jedoch UTF-8-codiert ist, müssen wir zuerst prüfen, ob das erste Zeichen ein Ein-oder Zwei-Byte-Zeichen ist, und dann müssen wir dieselbe Prüfung für das zweite Zeichen durchführen. Erst dann können wir auf das dritte Zeichen zugreifen. Der Leistungsunterschied ist umso größer, je länger die Saite ist.
Dies ist beispielsweise bei einigen Datenbank-Engines ein Problem, bei denen nach einem UTF-8-codierten VARCHAR ein Spaltenanfang steht und die Datenbank nicht nur überprüfen muss, wie viele Zeichen sich im VARCHAR-Feld befinden, sondern auch, wie Jedes von ihnen verwendet viele Bytes.
quelle
Wenn Sie nur die US-ASCII-Teilmenge (oder ISO 646-Teilmenge) von UTF-8 verwenden, hat die eine oder andere keinen wirklichen Vorteil. in der Tat ist alles identisch codiert.
Wenn Sie über den US-ASCII-Zeichensatz hinausgehen und (zum Beispiel) Zeichen mit Akzenten, Umlauten usw. verwenden, die in typischen westeuropäischen Sprachen verwendet werden, gibt es einen Unterschied - die meisten davon können es immer noch Wird in ISO 8859 mit einem einzigen Byte codiert, erfordert jedoch zwei oder mehr Bytes, wenn es in UTF-8 codiert wird. Es gibt natürlich auch Nachteile: ISO 8859 erfordert , dass Sie einige aus Band verwenden , bedeutet die Codierung angeben , verwendet wird, und es unterstützt nur einvon diesen Sprachen zu einer Zeit. Beispielsweise können Sie alle Zeichen des kyrillischen Alphabets (Russisch, Weißrussisch usw.) mit jeweils nur einem Byte codieren, wenn Sie jedoch französische oder spanische Zeichen (mit Ausnahme der US-ASCII-Zeichen) benötigen / möchten / ISO 646-Teilmenge) Sie haben so ziemlich Pech - Sie müssen die Zeichensätze dafür komplett ändern.
ISO 8859 ist wirklich nur für europäische Alphabete nützlich. Um die meisten der in den meisten chinesischen, japanischen, koreanischen, arabischen usw. Alphabeten verwendeten Alphabete zu unterstützen, müssen Sie eine völlig andere Codierung verwenden. Einige davon (z. B. Shift JIS für Japaner) sind absolut schmerzhaft. Wenn es eine Chance gibt, dass Sie sie jemals unterstützen möchten, würde ich die Verwendung von Unicode für alle Fälle als sinnvoll erachten.
quelle
ANSI kann viele Dinge sein, die meisten sind in dieser Hinsicht 8-Bit-Zeichensätze (wie Codepage 1252 unter Windows).
Vielleicht haben Sie an ASCII gedacht, 7-Bit und eine richtige Teilmenge von UTF-8. Dh jeder gültige ASCII-Stream ist auch ein gültiger UTF-8-Stream.
Wenn Sie an 8-Bit-Zeichensätze denken, besteht ein sehr wichtiger Vorteil darin, dass alle darstellbaren Zeichen genau 8-Bit-Zeichen sind, wobei sie in UTF-8 bis zu 24 Bit lang sein können.
quelle
Ja, es gibt immer noch einige Anwendungsfälle, in denen ASCII sinnvoll ist: Dateiformate und Netzwerkprotokolle . Insbesondere für Anwendungen, bei denen:
Indem Sie ASCII als Kodierung verwenden, vermeiden Sie die Komplexität der Mehrbyte-Kodierung, während die Lesbarkeit erhalten bleibt.
Einige Beispiele:
IDAT
"Bilddaten" undPLTE
"Palette" bedeutet.Natürlich müssen Sie darauf achten, dass die Daten den Endbenutzern nicht wirklich angezeigt werden, denn wenn sie sichtbar werden (wie im Fall von URLs), werden die Benutzer dies zu Recht erwarten in einer Sprache, die sie lesen können.
quelle
Erstens: Ihr Titel verwendet / d ANSI, während Sie sich im Text auf ASCII beziehen. Bitte beachten Sie, dass ANSI nicht gleich ASCII ist. ANSI enthält den ASCII-Satz. Der ASCII-Satz ist jedoch auf die ersten 128 numerischen Werte (0 - 127) beschränkt.
Wenn alle Ihre Daten auf ASCII (7-Bit) beschränkt sind, spielt es keine Rolle, ob Sie UTF-8, ANSI oder ASCII verwenden, da sowohl ANSI als auch UTF-8 den vollständigen ASCII-Satz enthalten. Mit anderen Worten: Die numerischen Werte 0 bis einschließlich 127 stehen für genau dieselben Zeichen in ASCII, ANSI und UTF-8.
Wenn Sie Zeichen außerhalb des ASCII-Satzes benötigen, müssen Sie eine Codierung auswählen. Sie könnten ANSI verwenden, aber dann stoßen Sie auf die Probleme aller verschiedenen Codepages. Erstellen Sie eine Datei auf Maschine A und lesen Sie sie auf Maschine B. Diese kann / wird unter Umständen witzig aussehende Texte erzeugen, wenn diese Maschinen so eingerichtet sind, dass sie unterschiedliche Codepages verwenden. Dies liegt einfach daran, dass der numerische Wert nnn unterschiedliche Zeichen in diesen Codepages darstellt.
Diese "Codepage Hölle" ist der Grund, warum der Unicode-Standard definiert wurde. UTF-8 ist nur eine einzige Kodierung dieses Standards, es gibt noch viel mehr. UTF-16 wird am häufigsten verwendet, da es die native Codierung für Windows ist.
Wenn Sie also etwas unterstützen müssen, das über die 128 Zeichen des ASCII-Satzes hinausgeht, empfehle ich UTF-8 . Auf diese Weise spielt es keine Rolle und Sie müssen sich keine Gedanken darüber machen, mit welcher Codepage Ihre Benutzer ihre Systeme eingerichtet haben.
quelle