it-swarm.dev

Was ist der Vorteil der Auswahl von ASCII Codierung gegenüber UTF-8?

Alle Zeichen in ASCII können mit UTF-8 ohne Erhöhung des Speichers codiert werden (beide erfordern ein Byte Speicher).

UTF-8 bietet den zusätzlichen Vorteil der Zeichenunterstützung über "ASCII-Zeichen" hinaus. Wenn dies der Fall ist, warum werden wir jemals ASCII Codierung über UTF-8) wählen?

Gibt es einen Anwendungsfall, in dem wir ASCII anstelle von UTF-8) wählen?

96
Pacerier

In einigen Fällen kann der Zugriff auf einzelne Zeichen beschleunigt werden. Stellen Sie sich string str='ABC' in UTF8 und in ASCII) codiert (und vorausgesetzt, die Sprache/der Compiler/die Datenbank kennt sich mit Codierung aus)

Um auf das dritte (C) Zeichen aus dieser Zeichenfolge mit dem Array-Zugriffsoperator zuzugreifen, der in vielen Programmiersprachen enthalten ist, würden Sie so etwas wie c = str[2].

Wenn die Zeichenfolge ASCII codiert) ist, müssen wir nur das dritte Byte aus der Zeichenfolge abrufen.

Wenn jedoch die Zeichenfolge UTF-8-codiert ist, müssen wir zuerst prüfen, ob das erste Zeichen ein Zeichen mit einem oder zwei Bytes ist. Dann müssen wir die gleiche Prüfung für das zweite Zeichen durchführen, und 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 in einigen Datenbank-Engines ein Problem, bei denen ein Anfang einer Spalte nach einem UTF-8-codierten VARCHAR gefunden werden muss. Die Datenbank muss nicht nur überprüfen, wie viele Zeichen im VARCHAR-Feld vorhanden sind, sondern auch wie viele Bytes, die jeder von ihnen verwendet.

85
Mchl

Wenn Sie nur die US-ASCIIoder ISO 646-) Teilmenge von UTF-8 verwenden, gibt es für den einen oder anderen keinen wirklichen Vorteil. Tatsächlich 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 in ISO 8859 mit einem einzelnen Byte codiert werden, benötigt jedoch zwei oder mehr Bytes, wenn es in UTF-8 codiert wird. Es gibt natürlich auch Nachteile: ISO 8859 erfordert, dass Sie einige Out-of-Band-Mittel verwenden, um die verwendete Codierung anzugeben, und es werden jeweils nur --- (eine dieser Sprachen unterstützt. Sie können beispielsweise alle Zeichen des kyrillischen Alphabets (Russisch, Weißrussisch usw.) mit nur einem Byte pro Stück codieren, wenn Sie diese jedoch mit französischen oder spanischen Zeichen (außer denen in US-ASCII) mischen möchten/möchten/ISO 646-Teilmenge) Sie haben ziemlich viel Pech - dafür müssen Sie die Zeichensätze komplett ändern.

ISO 8859 ist wirklich nur für europäische Alphabete nützlich. Um die meisten Alphabete zu unterstützen, die in den meisten chinesischen, japanischen, koreanischen, arabischen usw. Alphabeten verwendet werden, müssen Sie eine völlig andere Codierung verwenden. Einige davon (z. B. Shift JIS für Japanisch) sind ein absoluter Schmerz. Wenn es eine Chance gibt, dass Sie sie jemals unterstützen möchten, würde ich es für sinnvoll halten, Unicode für alle Fälle zu verwenden.

7
Jerry Coffin

ANSI kann viele Dinge sein, die meisten sind diesbezüglich 8-Bit-Zeichensätze (wie Codepage 1252 unter Windows).

Vielleicht haben Sie an ASCII, das 7-Bit und eine richtige Teilmenge von UTF-8 ist, gedacht. Dh jeder gültige ASCII Stream ist auch ein gültiger UTF-8 Strom.

Wenn Sie an 8-Bit-Zeichensätze denken, wäre ein sehr wichtiger Vorteil, dass alle darstellbaren Zeichen genau 8-Bit sind, wobei sie in UTF-8 bis zu 24 Bit betragen können.

5
user1249

Ja, es gibt noch einige Anwendungsfälle, in denen ASCII sinnvoll ist: Dateiformate und Netzwerkprotokolle . Insbesondere für Anwendungen, bei denen:

  • Sie haben Daten, die von Computerprogrammen generiert und verwendet werden und die Endbenutzern niemals präsentiert werden.
  • Aber was für Programmierer nützlich ist, um lesen zu können, um die Entwicklung und das Debuggen zu vereinfachen.

Indem Sie ASCII als Codierung verwenden, vermeiden Sie die Komplexität der Mehrbyte-Codierung, während Sie zumindest eine gewisse Lesbarkeit beibehalten.

Einige Beispiele:

  • HTTP ist ein Netzwerkprotokoll, das in Form von Oktettsequenzen definiert ist, aber es ist sehr nützlich (zumindest für englischsprachige Programmierer), dass diese dem ASCII Codierung von Wörtern wie "GET", "POST", "Accept-Language" und so weiter.
  • Das Chunk-Typen im PNG-Bildformat besteht aus vier Oktetten, aber es ist praktisch, wenn Sie einen PNG-Codierer oder -Decodierer programmieren, der IDAT "Bilddaten" und PLTE bedeutet "Palette".

Natürlich müssen Sie darauf achten, dass die Daten wirklich nicht den Endbenutzern präsentiert werden, denn wenn sie sichtbar werden (wie es passiert ist) Im Fall von URLs) erwarten Benutzer zu Recht, dass die Daten in einer Sprache vorliegen, die sie lesen können.

3
Gareth Rees

Zuallererst: 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 die Menge ASCII). Die Menge ASCII 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 das vollständige = enthalten ASCII set. Mit anderen Worten: Die numerischen Werte 0 bis einschließlich 127 repräsentieren genau die gleichen Zeichen in ASCII, ANSI und UTF-8.

Wenn Sie Zeichen außerhalb des Satzes ASCII) benötigen, müssen Sie eine Codierung auswählen. Sie können ANSI verwenden, stoßen dann jedoch auf die Probleme aller verschiedenen Codepages. Erstellen Sie eine Datei auf Maschine A und lesen Sie es auf Maschine B kann/wird lustig aussehende Texte erzeugen, wenn diese Maschinen für die Verwendung unterschiedlicher Codepages eingerichtet sind, einfach weil der numerische Wert nnn unterschiedliche Zeichen in diesen Codepages darstellt.

Diese "Codepage-Hölle" ist der Grund, warum nicode-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 Satzes ASCII) hinausgeht, ist mein Rat, mit TF-8 zu arbeiten. 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.

2
Marjan Venema