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

Alle Zeichen in ASCII können mit UTF-8 ohne Speichererweiterung codiert werden (beide erfordern ein Speicherbyte).

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

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

Kommentare

  • Um Legacy-Inhalte zu unterstützen …
  • Ich meine, der UTF8 ist ein Vermächtnis Unterstützt auch ASCII. Selbst wenn Sie Legacy-Inhalte unterstützen müssen, funktioniert UTF8 einwandfrei. Es sind keine weiteren Änderungen erforderlich.
  • Vielleicht müssen Sie ‚ zusammenarbeiten Ein System, das 8 ASCII-Zeichen in 7 Bytes packt? Die Leute haben verrückte Sachen gemacht, um Dinge hinein zu passen.
  • Nennen Sie mich verrückt, aber ich ‚ d sagen Sicherheit und Stabilität. Ein Zeichensatz ohne Multi-Byte-Sequenzen ist viel schwieriger zu brechen. Verstehen Sie mich nicht falsch, wenn die Unterstützung der menschlichen Sprache wichtig ist. ASCII wird nicht. id id = „c7158ce818“>

div id = „c7158ce818“> schneidet es nicht. Aber wenn Sie ‚ nur eine grundlegende Programmierung durchführen und sich in die Muttersprache des Compilers und der Bedienung quetschen können g System wurden geschrieben, warum die Komplexität hinzufügen? @Donal Fellows. Zuletzt habe ich überprüft … ASCII ist 7 Bytes. (Alles mit diesem zusätzlichen Bit ist nicht ‚ t ASCII und fragt nach Problemen)

  • @ebyrob Ich denke, Donal Fellows bedeutet, 8 ASCII-Symbole in 7 Bytes zu packen , da jedes Symbol jeweils 7 Bits verwendet … 8 * 7 = 56 Bits = 7 Bytes. Dies würde eine spezielle Codierungs- und Decodierungsfunktion bedeuten, um nur 1 Byte Speicherplatz pro 8 zu sparen.
  • Antwort

    In einigen Fällen kann der Zugriff auf einzelne Zeichen beschleunigt werden. Stellen Sie sich die Zeichenfolge str="ABC" vor, die in UTF8 und ASCII codiert ist (und davon ausgeht, dass die Sprache / der Compiler / die Datenbank die Codierung kennt). d91df509de „>

    ) Zeichen aus dieser Zeichenfolge mit dem Array-Zugriffsoperator, der in vielen Programmiersprachen enthalten ist. Sie würden beispielsweisec = str[2]ausführen.

    Jetzt 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 dieselbe Prüfung für das zweite Zeichen durchführen, und erst dann können wir auf das Zeichen zugreifen drittes Zeichen. Der Leistungsunterschied ist umso größer, je länger die Zeichenfolge ist.

    Dies ist beispielsweise in einigen Datenbankmodulen ein Problem, bei dem ein Anfang einer Spalte „nach“ einem UTF-8-codierten VARCHAR platziert wird Die Datenbank muss nicht nur überprüfen, wie viele Zeichen sich im Feld VARCHAR befinden, sondern auch, wie viele Bytes jeder von ihnen verwendet.

    Kommentare

    • Wenn die Datenbank ‚ nicht beide “ Zeichenanzahl “ und die “ Byteanzahl „, dann würde ich ‚ sagen es ‚ hat einige Probleme …
    • TBH Ich kenne keine Datenbank, die auch speichern würde …
    • @Mchl: wie Stellen Sie sich vor, die Datenbank weiß, wann sie das Ende der Zeichenfolge erreicht hat?
    • Normalerweise durch Erreichen von 0x00 oder 0x0000
    • @DeanHarding Wie sagt Ihnen die Anzahl der Zeichen, wo das zweite Zeichen beginnt? ? Oder sollte die Datenbank auch einen Index für jeden Zeichenversatz enthalten? Hinweis: Es ist nicht ‚ nicht nur 2 Zeichen, sondern kann bis zu 4 sein (es sei denn, es ist ‚ 6) stackoverflow.com/questions/9533258/… . (Ich denke, es ist ‚ nur utf-16, das die wirklich langen Greuel hatte, die Ihr System zerstören könnten)

    Antwort

    Wenn Sie nur die US-ASCII- (oder 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 normalerweise verwendet werden westeuropäische Sprachen, dann gibt es einen Unterschied – die meisten davon können in ISO 8859 immer noch mit einem einzigen Byte codiert werden, erfordern jedoch zwei oder mehr Bytes, wenn sie in UTF-8 codiert werden. Es gibt natürlich auch Nachteile: ISO 8859 erfordert, dass Sie einige Out-of-Band-Mittel verwenden, um die verwendete Codierung anzugeben, und es wird jeweils nur eine dieser Sprachen unterstützt. Sie können beispielsweise alle Zeichen der kyrillischen Sprache (Russisch, Weißrussisch usw.) codieren.) Alphabet mit nur einem Byte pro Stück, aber wenn Sie diese mit französischen oder spanischen Zeichen (außer denen in der US-ASCII / ISO 646-Teilmenge) mischen müssen / müssen, haben Sie ziemlich viel Pech – Sie müssen komplett Ändern Sie dazu die Zeichensätze.

    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 verwenden Einige davon sind völlig schwierig. 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 nur in zu verwenden case.

    Antwort

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

    Vielleicht haben Sie an ASCII gedacht, das 7-Bit und eine richtige Teilmenge von UTF-8 ist. Das heißt, Jeder gültige ASCII-Stream ist auch ein gültiger UTF-8-Stream.

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

    Kommentare

    • Ja, ich ‚ spreche darüber das 7-Bit-ASCII-Set. Können Sie sich einen Vorteil vorstellen, den wir jemals brauchen werden, um etwas als ASCII anstelle von utf-8 zu speichern? (Da das 7-Bit ohnehin als 8-Bit gespeichert würde, wäre die Dateigröße genau gleich.)
    • Wenn Sie Zeichen haben, die größer als der Unicode-Wert 127 sind, können sie nicht in ASCII gespeichert werden.
    • @Pacerier: Jede ASCII-Zeichenfolge ist eine UTF-8-Zeichenfolge , daher gibt es keinen Unterschied . Die Codierungsroutine ist möglicherweise schneller, abhängig von der Zeichenfolgendarstellung der von Ihnen verwendeten Plattform, obwohl ich ‚ keine signifikante Beschleunigung erwarten würde, während Sie einen signifikanten Verlust haben in Flexibilität.
    • @Thor das ist genau der Grund, warum ich ‚ frage, ob das Speichern als ASCII überhaupt Vorteile hat
    • @Pacerier, Wenn Sie XML als ASCII speichern, müssen Sie z & # 160; für einen nicht zerbrechlichen Raum. Dies ist füllender, macht Ihre Daten jedoch widerstandsfähiger gegen ISO-Latin-1- und UTF-8-Codierungsfehler. Dies ist, was wir tun, da unsere zugrunde liegende Plattform viel unsichtbare Magie mit Charakteren ausübt. Wenn Sie in ASCII bleiben, werden unsere Daten robuster.

    Antwort

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

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

    Durch die Verwendung von ASCII als Codierung vermeiden Sie die Komplexität der Mehrbyte-Codierung, während Sie zumindest eine gewisse Lesbarkeit für den Menschen beibehalten.

    Einige Beispiele:

    • HTTP ist ein Netzwerkprotokoll, das in Form von Oktettsequenzen definiert ist. Es ist jedoch sehr nützlich (zumindest für englischsprachige Programmierer), dass diese der ASCII-Codierung von Wörtern wie „GET“, „POST“, „Accept-Language“ usw. entsprechen.
    • The Chunk-Typen im PNG-Bildformat bestehen aus vier Oktetten. Es ist jedoch praktisch, wenn Sie einen PNG-Codierer oder -Decodierer programmieren, der IDAT bedeutet“ Bilddaten „und PLTE bedeutet“ Palette „.

    Natürlich müssen Sie Achten Sie darauf, dass die Daten den Endbenutzern nicht präsentiert werden. Wenn sie sichtbar werden (wie dies bei URLs der Fall ist), erwarten die Benutzer diese Daten zu Recht in einer Sprache zu sein, die sie lesen können.

    Kommentare

    • Gut gesagt. ‚ ist ein wenig ironisch, dass HTTP, das Protokoll, das den meisten Unicode auf dem Planeten überträgt, nur ASCII unterstützen muss. (Ich nehme an, dasselbe gilt für TCP und IP, Binärunterstützung, ASCII-Unterstützung … das ‚ ist alles, was Sie auf dieser Ebene des Stapels benötigen)

    Antwort

    Zunächst einmal: 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 verwenden , ANSI oder ASCII, da sowohl ANSI als auch UTF-8 den vollständigen ASCII-Satz enthalten. 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 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. Wenn diese Maschinen für die Verwendung unterschiedlicher Codepages eingerichtet sind, können / werden sie witzig aussehende Texte erzeugen. Dies ist einfach, da 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 sich um die native Codierung für Windows handelt.

    Wenn Sie also mehr als die 128 Zeichen des ASCII-Satzes unterstützen müssen, 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.

    Kommentare

    • Wenn ich nicht mehr als 128 Zeichen unterstützen muss, was ist der Vorteil der Wahl der ACSII-Codierung gegenüber der UTF8-Codierung?
    • .

    • Abgesehen davon, dass Sie sich auf diese 128 Zeichen beschränken? Wenig. UTF-8 wurde speziell für ASCII und die meisten westlichen Sprachen entwickelt, für die “ nur “ ANSI benötigen. Sie werden feststellen, dass UTF-8 nur eine relativ kleine Anzahl der höheren ANSI-Zeichen mit mehr als einem Byte codiert. Es gibt einen Grund, warum die meisten HTML-Seiten UTF-8 als Standard verwenden …
    • @Pacerier, wenn Sie ‚ keine Codierung über 127 benötigen, Die Auswahl von ASCII kann sinnvoll sein, wenn Sie eine API zum Codieren / Decodieren verwenden, da UTF eine zusätzliche Bitüberprüfung benötigt, um zusätzliche Bytes als dasselbe Zeichen zu betrachten. Es kann eine zusätzliche Berechnung anstelle von reinem ASCII erforderlich sein, das nur 8 Bit ohne Überprüfung liest. Ich empfehle Ihnen jedoch nur, ASCII zu verwenden, wenn Sie wirklich ein hohes Maß an Optimierung für große (große, große) Berechnungen benötigen und wissen, was Sie ‚ bei dieser Optimierung tun. Wenn nicht, verwenden Sie einfach UTF-8.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.