Ist ASCII-Code 7-Bit oder 8-Bit?

100

Mein Lehrer sagte mir, dass ASCII ein 8-Bit-Zeichencodierungsschema ist. Es ist jedoch nur für 0-127-Codes definiert, was bedeutet, dass es in 7-Bit-Codes eingepasst werden kann. Kann man also nicht behaupten, dass das ASCII-Bit tatsächlich 7-Bit-Code ist?

Und was wollen wir überhaupt sagen, wenn wir sagen, dass ASCII überhaupt 8-Bit-Code ist?

Anurag Kalia
quelle

Antworten:

90

ASCII wurde ursprünglich als 7-Bit-Code konzipiert. Dies geschah lange bevor 8-Bit-Bytes allgegenwärtig wurden, und sogar in den 1990er Jahren konnte man Software finden, die davon ausging, dass sie das 8. Bit jedes Textbytes für ihre eigenen Zwecke verwenden konnte ("nicht 8-Bit-Clean"). Heutzutage wird es als 8-Bit-Codierung betrachtet, bei der die Bytes 0x80 bis 0xFF keine definierte Bedeutung haben, aber das ist ein Retcon .

Es gibt Dutzende von Textcodierungen, die das 8. Bit verwenden. Sie können als ASCII-kompatibel oder nicht ASCII-kompatibel und mit fester oder variabler Breite klassifiziert werden. ASCII-kompatibel bedeutet, dass einzelne Bytes mit Werten von 0x00 bis 0x7F unabhängig vom Kontext dieselben Zeichen codieren wie in ASCII. Sie möchten nichts mit einer nicht ASCII-kompatiblen Textcodierung zu tun haben, wenn Sie dies möglicherweise vermeiden können. naive Programme, die ASCII erwarten, neigen dazu, sie auf katastrophale, oft sicherheitsrelevante Weise falsch zu interpretieren. Sie sind heutzutage so veraltet, dass (zum Beispiel) HTML5 ihre Verwendung im öffentlichen Web verbietet, mit der unglücklichen Ausnahme von UTF-16 . Ich werde nicht mehr über sie sprechen.

Eine Codierung mit fester Breite bedeutet, wie es sich anhört: Alle Zeichen werden mit der gleichen Anzahl von Bytes codiert. Um ASCII-kompatibel zu sein, muss eine Festcodierung alle Zeichen mit nur einem Byte codieren, sodass sie nicht mehr als 256 Zeichen enthalten darf. Die heutzutage am häufigsten verwendete Codierung ist Windows-1252 , eine Erweiterung von ISO 8859-1 .

Es gibt heutzutage nur eine ASCII-kompatible Codierung mit variabler Breite, die es zu kennen gilt, aber sie ist sehr wichtig: UTF-8 , die den gesamten Unicode in eine ASCII-kompatible Codierung packt. Sie möchten dies wirklich verwenden, wenn Sie es verwalten können.

Abschließend nimmt "ASCII" heutzutage seine praktische Definition von Unicode, nicht von seinem ursprünglichen Standard (ANSI X3.4-1968), da es historisch gesehen mehrere Dutzend Variationen des ASCII-Repertoires mit 127 Zeichen gab - zum Beispiel einige davon Die Interpunktion kann durch Buchstaben mit Akzent ersetzt werden, um die Übertragung von französischem Text zu erleichtern. Heutzutage sind alle diese Variationen veraltet, und wenn Leute "ASCII" sagen, bedeuten sie, dass die Bytes mit den Werten 0x00 bis 0x7F Unicode-Codepunkte U + 0000 bis U + 007F codieren. Dies wird Ihnen wahrscheinlich nur wichtig sein, wenn Sie jemals einen technischen Standard schreiben.

Wenn Sie sich für die Geschichte von ASCII und die vorangegangenen Codierungen interessieren, beginnen Sie mit dem Artikel "The Evolution of Character Codes, 1874-1968" (Samizdat-Kopie unter http://falsedoor.com/doc/ascii_evolution-of- zeichencodes.pdf ) und dann seine Referenzen verfolgen (von denen viele online nicht verfügbar sind und selbst beim Zugang zu einer Universitätsbibliothek schwer zu finden sein können, muss ich leider sagen).

zwol
quelle
1
Ist ASCII heutzutage 7-Bit oder 8-Bit? Sie sagen, es verwendet jetzt offensichtlich 0x00-0x7F. Aber zählen wir die führende 0?
Anurag Kalia
8
Das hängt davon ab, welche Art von Pedant Sie sind. Die Spezifikation, die ASCII noch offiziell definiert (ANSI X3.4-1968), beschreibt es als 7-Bit-Codierung, aber niemand überträgt mehr 7-Bit-Bytes, und die Interoperabilität schreibt heutzutage vor, dass das achte Bit Null sein muss - das können Sie nicht Verwenden Sie es für ein Paritätsbit oder ähnliches. Daher ist es IMNSHO gleichermaßen gültig, ASCII als eine 8-Bit-Codierung zu beschreiben, bei der die obere Hälfte des Nummernraums als "reserviert, nicht verwenden" belassen wird. In beiden Fällen übertragen Sie kein gültiges ASCII , wenn Sie Acht-Bit-Bytes übertragen, für die jeweils ein hohes Bit gesetzt ist .
zwol
1
(... aber Sie senden möglicherweise etwas anderes als UTF-8 oder ISO 8859-1 oder KOI8-R.)
zwol
1
Um wirklich pedantisch zu sein, lautet der Standard jetzt INCITS 4-1986 [R2012], da ASC, früher bekannt als X3, zu NCITS mutiert und dann zu INCITS. Die 7-Bit-Varianten mit etwa einem Dutzend Buchstaben mit Akzent für Französisch, Deutsch, Spanisch usw. sind jedoch nichts ANSI / INCITS, sondern ISO / IEC 646 und ECMA-6. Und es ist 8-Bit (ISO / IEC) 8859-1, das den ersten 256-Zeichen-Block von Unicode bildet.
Dave_thompson_085
2
@ dave_thompson_085 Nicht jeder ist so pedantisch wie Sie - das heißt , Sie ältere technische Dokumentation, und auch Normen finden, diese Referenz „ASCII“ oder sogar „X3.4-1968“, in der Absicht zu schließen , die nationalen Varianten oder zumindest nicht klar ausschließen, was zu Argumenten führt. Daher würde ich persönlich Unicode als normative Referenz für ASCII verwenden, wenn ich eine Spezifikation schreiben müsste, wo es darauf ankommt. Das ist alles was ich meinte.
zwol
14

Unter Linux man asciiheißt es:

ASCII ist der amerikanische Standardcode für den Informationsaustausch. Es ist ein 7-Bit-Code.

BeniBela
quelle
9

Die ursprüngliche ASCII-Tabelle ist auf 7 Bit codiert und hat daher 128 Zeichen.

Heutzutage verwenden die meisten Leser / Redakteure eine "erweiterte" ASCII-Tabelle (ab ISO 8859-1 ), die auf 8 Bit codiert ist und 256 Zeichen enthält (einschließlich Á , Ä , Œ , é , è und anderer Zeichen, die auch für europäische Sprachen nützlich sind als mathematische Glyphen und andere Symbole).

Während UTF-8 verwendet die gleiche Codierung wie die Basis - ASCII - Tabelle (Bedeutung 0x41ist A in beiden Codes), ist es nicht die gleiche Codierung für den „Latin Extended-A“ Block teilen. Was manchmal dazu führt, dass seltsame Zeichen in Wörtern wie à la carte oder piñata vorkommen .

Guillaume
quelle
Es gibt mehrere Fehler in den oben genannten. Œ ist nicht Teil von ISO 8859-1, obwohl es in CP-1252 enthalten ist . Und der lateinische Extended-A- Block besteht nicht aus den ersten 128 oder 256 Zeichen von Unicode: Es ist der nächste Block, der Buchstaben wie ğ, ł und ſ enthält.
Richard Smith
Guter Punkt! Ich glaube, ich meinte "Latin-1 Supplement". Standards Standards ...
Guillaume
1
Es gibt viele "Extended ASCII" -Zeichensätze und nur einer davon ist ISO 8859-1. Der Begriff ist fast bedeutungslos, da Sie beim Codieren und Decodieren von Text wissen müssen, welche spezifische Zeichenkodierung verwendet wird (und möglicherweise nicht einmal für einen erweiterten ASCII-Zeichensatz).
Tom Blodget
2

Die ASCII-Codierung ist 7-Bit, aber in der Praxis werden in ASCII codierte Zeichen nicht in Gruppen von 7 Bit gespeichert. Stattdessen wird ein ASCII in einem Byte gespeichert, wobei das MSB normalerweise auf 0 gesetzt ist (ja, es wird in ASCII verschwendet).

Sie können dies überprüfen, indem Sie eine Zeichenfolge in den ASCII-Zeichensatz in einem Texteditor eingeben, die Codierung auf ASCII einstellen und die Binärdatei / Hex anzeigen:
Geben Sie hier die Bildbeschreibung ein

Abgesehen davon: Die Verwendung von (streng) ASCII-Codierung ist jetzt zugunsten von UTF-8 ungewöhnlich (wodurch das oben erwähnte MSB nicht verschwendet wird - tatsächlich zeigt ein MSB von 1 an, dass der Codepunkt mit mehr als 1 Byte codiert ist).

flow2k
quelle
0

Der ursprüngliche ASCII-Code enthielt 128 verschiedene Zeichen mit den Nummern 0 bis 127. ASCII und 7-Bit sind synonym. Da das 8-Bit-Byte das gemeinsame Speicherelement ist, lässt ASCII Platz für 128 zusätzliche Zeichen, die für Fremdsprachen und andere Symbole verwendet werden. Der 7-Bit-Code wurde jedoch ursprünglich vor dem 8-Bit-Code erstellt. ASCII steht für American Standard Code für den Informationsaustausch In frühen Internet-Mail-Systemen wurden nur 7-Bit-ASCII-Codes unterstützt, da dann Programme und Multimediadateien über Saugsysteme ausgeführt werden konnten. Diese Systeme verwenden 8 Bit des Bytes, müssen dann jedoch mithilfe von Codierungsmethoden wie MIME, UUcoding und BinHex in ein 7-Bit-Format umgewandelt werden. Dies bedeutet, dass das 8-Bit in 7-Bit-Zeichen konvertiert wurde, wodurch zusätzliche Bytes hinzugefügt werden, um sie zu codieren.

brookey
quelle
-2

Wenn wir ASCII als 7-Bit-Code aufrufen, wird das Bit ganz links als Vorzeichenbit verwendet, sodass wir mit 7 Bits bis zu 127 schreiben können. Dies bedeutet von -126 bis 127, da der maximale Imam-Wert von ASCII 0 bis 255 beträgt. Dies kann sein Nur mit dem Argument 7 Bit zufrieden, wenn das letzte Bit als Vorzeichenbit betrachtet wird

aju
quelle