ASCII

Wikipedia-Artikel

American Standard Code for Information Interchange

aus Wikipedia, der freien Enzyklopädie (Weitergeleitet von ASCII), für bessere Lesbarkeit modifiziert

Der American Standard Code for Information Interchange (ASCII, alternativ US-ASCII, oft [ 'æski] ausgesprochen) ist eine 7-Bit-Zeichenkodierung; sie entspricht der US-Variante von ISO 646 und dient als Grundlage für spätere, auf mehr Bits basierende Kodierungen für Zeichensätze.

Die ASCII-Kodierung wurde am 17. Juni 1963 von der American Standards Association (ASA) als Standard ASA X3.4-1963 veröffentlicht und 1967 sowie zuletzt im Jahr 1968 (ANSI X3.4-1968) aktualisiert. Die Zeichenkodierung definiert 128 Zeichen, bestehend aus 33 nicht druckbaren sowie 95 druckbaren Zeichen. Letztere sind, beginnend mit dem Leerzeichen:

 !"#$%&'()*+,-./ 0123456789:;<=>?
@ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_
`abcdefghijklmno pqrstuvwxyz{|}~  

Die druckbaren Zeichen umfassen das lateinische Alphabet in Groß- und Kleinschreibung, die zehn arabischen (eigentlich: indischen) Ziffern, sowie einige Satzzeichen. Der Zeichenvorrat entspricht weitgehend dem einer Tastatur oder Schreibmaschine für die englische Sprache. In Computern und anderen elektronischen Geräten, die Text darstellen, wird dieser in der Regel gemäß ASCII oder abwärtskompatibel (ISO 8859, Unicode) dazu gespeichert.

Die nicht druckbaren Steuerzeichen enthalten Ausgabezeichen wie Zeilenvorschub oder Tabulator, Protokollzeichen wie Übertragungsende oder Bestätigung und Trennzeichen wie Datensatztrennzeichen.

Kodierung

Jedem Zeichen wird ein Bitmuster aus 7 Bit zugeordnet. Da jedes Bit zwei Werte annehmen kann, gibt es 27 = 128 verschiedene Bitmuster, die auch als die ganzen Zahlen 0–127 (hexadezimal 00–7F) interpretiert werden können.

In nicht-englischen Sprachen verwendete Sonderzeichen – beispielsweise die deutschen Umlaute – sind im ASCII-Zeichensatz nicht enthalten.

Die Buchstaben A, B und C als Sieben-Bit-Code
SchriftzeichenDezimalHexadezimalBinär
A6541(0)1000001
B6642(0)1000010
C6743(0)1000011

Das für ASCII nicht benutzte achte Bit kann auch für Fehlerkorrekturzwecke (Paritätsbit) auf den Kommunikationsleitungen oder für andere Steuerungsaufgaben verwendet werden. Heute wird es aber fast immer zur Erweiterung von ASCII auf einen 8-Bit-Code verwendet. Diese Erweiterungen sind mit dem ursprünglichen ASCII weitgehend kompatibel, so daß alle im ASCII definierten Zeichen auch in den verschiedenen Erweiterungen durch die gleichen Bitmuster kodiert werden. Die einfachsten Erweiterungen sind Kodierungen mit sprachspezifischen Zeichen, die nicht im lateinischen Grundalphabet enthalten sind.

Geschichte

Eine frühe Form der Zeichenkodierung war der Morsecode. Er wurde mit der Einführung von Fernschreibern aus den Telegrafennetzen verdrängt und durch den Baudot-Code und Murray-Code ersetzt. Vom 5-Bit-Murray-Code zum 7-Bit-ASCII war es dann nur noch ein kleiner Schritt – auch ASCII wurde zuerst für bestimmte amerikanische Fernschreibermodelle, wie den Teletype ASR33, eingesetzt. In den Anfängen des Computerzeitalters entwickelte sich ASCII zum Standard-Code für Schriftzeichen. Zum Beispiel wurden viele Terminals (VT100) und Drucker nur mit ASCII angesteuert.

ASCII diente ursprünglich der Darstellung von Schriftzeichen der englischen Sprache. Die erste Version, noch ohne Kleinbuchstaben und mit kleinen Abweichungen vom heutigen ASCII, entstand im Jahr 1963. 1968 wurde dann der bis heute gültige ASCII festgelegt. Um später auch Sonderzeichen anderer Sprachen darstellen zu können (beispielsweise die deutschen Umlaute), ersetzte man wenig benutzte Zeichen (siehe DIN 66003, ISO 646). Oder man nahm ASCII für neue Kodierungen mit acht Bit pro Zeichen (z.B. DIN 66303, ISO 8859) als kompatible Grundlage. Allerdings boten auch 8-Bit-Codes, in denen ein Byte für ein Zeichen stand, zu wenig Platz, um alle Zeichen der menschlichen Schriftkultur gleichzeitig unterzubringen. Dadurch wurden mehrere verschiedene spezialisierte Erweiterungen notwendig. Daneben existieren vor allem für den ostasiatischen Raum einige ASCII-kompatible Kodierungen, die entweder zwischen verschiedenen Codetabellen umschalten oder mehr als ein Byte für jedes Nicht-ASCII-Zeichen benötigen. Keine dieser 8-Bit-Erweiterungen ist aber „ASCII“, denn das bezeichnet nur den einheitlichen 7-Bit-Code.

DezHexASCII 1963ASCII 1965ASCII heute
0 .. 630x0 .. 0x3F→ siehe normale Zusammensetzung
640x40@`@
65 .. 910x41 .. 0x5B→ siehe normale Zusammensetzung
920x5C\~\
930x5D→ siehe normale Zusammensetzung
940x5E^^
950x5F__
960x60unbelegt@`
97 .. 1220x61 .. 0x7Aunbelegta – za – z
1230x7Bunbelegt{{
1240x7Cunbelegt¬|
1250x7Dunbelegt}}
1260x7EESC|~

Für die Kodierung lateinischer Zeichen wird fast nur noch im Großrechnerbereich eine zu ASCII inkompatible Kodierung verwendet (EBCDIC). Der wenig verbreitete ROT47-Algorithmus wendet das von ROT13 bekannte Verschlüsselungsverfahren auf alle ASCII-Zeichen zwischen 33 („!“) und 126 („~“) an.

Zusammensetzung

ASCII-Zeichentabelle, hexadezimale Nummerierung
Code…0…1…2…3…4…5…6…7…8…9…A…B…C…D…E…F
0… NULSOHSTXETX EOTENQACKBEL BSHTLFVT FFCRSOSI
1… DLEDC1DC2DC3 DC4NAKSYNETB CANEMSUBESC FSGSRSUS
2… SP!"# $%&' ()*+ ,-./
3… 01234567 89:; <=>?
4… @ABCDEFG HIJKLMNO
5… PQRSTUVW XYZ[\]^_
6… `abcdefg hijklmno
7… pqrstuvw xyz{|}~DEL

Die ersten 32 ASCII-Zeichencodes (von 0x00 bis 0x1F) sind für Steuerzeichen (control character) reserviert. Das sind Zeichen, die keine Schriftzeichen darstellen, sondern die zur Steuerung von solchen Geräten dienen (oder dienten), die den ASCII verwenden (etwa Drucker). Steuerzeichen sind beispielsweise der Wagenrücklauf (carriage return) für den Zeilenumbruch oder Bell (die Glocke); ihre Definition ist historisch begründet.

Code 0x20 (SP) ist das Leerzeichen (engl. space oder blank), das in einem Text als Leer- und Trennzeichen zwischen Wörtern verwendet und auf der Tastatur durch die Leertaste erzeugt wird.

Die Codes 0x21 bis 0x7E stehen für druckbare Zeichen, die Buchstaben, Ziffern und Satzzeichen umfassen.

Code 0x7F (alle sieben Bits auf eins gesetzt) ist ein Sonderzeichen, das auch als Löschzeichen bezeichnet wird (DEL). Dieser Code wurde früher wie ein Steuerzeichen verwendet, um auf Lochstreifen oder Lochkarten ein bereits gelochtes Zeichen nachträglich durch das Setzen aller Bits, das heißt durch Auslochen aller sieben Markierungen, löschen zu können – einmal vorhandene Löcher kann man schließlich nicht mehr rückgängig machen. Bereiche ohne Löcher (also mit dem Code 0x00) fanden sich vor allem am Anfang und Ende eines Lochstreifens (NUL).

Aus diesem Grund gehörten zum eigentlichen ASCII nur 126 Zeichen, denn den Bitmustern 0 (0000000) und 127 (1111111) entsprachen keine Zeichencodes. Der Code 0 wurde später in der Programmiersprache C als „Ende der Zeichenkette“ interpretiert; dem Zeichen 127 wurden verschiedene grafische Symbole zugeordnet.

Erweiterungen

ASCII enthält keine diakritischen Zeichen, die in fast allen Sprachen auf der Basis des lateinischen Alphabets verwendet werden. Der internationale Standard ISO 646 (1972) war der erste Versuch, dieses Problem anzugehen, was allerdings zu Kompatibilitätsproblemen führte. Er ist immer noch ein Sieben-Bit-Code, und weil keine anderen Codes verfügbar waren, wurden einige Codes in neuen Varianten verwendet.

So ist etwa die ASCII-Position 93 für die rechte eckige Klammer (]) in der deutschen Zeichensatzvariante ISO 646-DE durch das große U mit Umlautpunkten (Ü) und in der dänischen Variante ISO 646-DK durch das große A mit Ring (Kroužek) (Å) ersetzt. Bei der Programmierung mußten dann die in vielen Programmiersprachen benutzten eckigen Klammern durch die entsprechenden nationalen Sonderzeichen ersetzt werden. Das verringerte die Lesbarkeit des Programmtextes und führte oft zu ungewollt komischen Ergebnissen, indem etwa die Einschaltmeldung des Apple II von „APPLE ][“ zu „APPLE ÜÄ“ mutierte.

Verschiedene Hersteller entwickelten eigene Acht-Bit-Codes. Der Codepage 437 genannte Code war lange Zeit der am weitesten verbreitete, er kam auf dem IBM-PC unter englischen MS-DOS, und kommt heute noch im DOS-Fenster von englischen Microsoft Windows zur Anwendung. In deren deutschen Installationen ist seit MS-DOS 3.3 die westeuropäische Codepage 850 der Standard.

Auch bei späteren Standards wie ISO 8859 wurden acht Bits verwendet. Dabei existieren mehrere Varianten, zum Beispiel ISO 8859-1 für die westeuropäischen Sprachen. Deutschsprachige Versionen von Windows (außer DOS-Fenster) verwenden die auf ISO 8859-1 aufbauende Kodierung Windows-1252 – daher sehen zum Beispiel die deutschen Umlaute falsch aus, wenn Textdateien unter DOS erstellt wurden und unter Windows betrachtet werden.

Viele ältere Programme, die das achte Bit für eigene Zwecke verwendeten, konnten damit nicht umgehen. Sie wurden im Lauf der Zeit oft den neuen Erfordernissen angepaßt.

Um den Anforderungen der verschiedenen Sprachen gerecht zu werden, wurde der Unicode (in seinem Zeichenvorrat identisch mit ISO 10646) entwickelt. Er verwendet bis zu 32 Bit pro Zeichen und könnte somit über vier Milliarden verschiedene Zeichen unterscheiden, wird jedoch auf etwa eine Million erlaubte Codepoints eingeschränkt. Damit können alle bislang von Menschen verwendeten Schriftzeichen dargestellt werden, sofern sie in den Unicode-Standard aufgenommen wurden. UTF-8 ist eine 8-Bit-Kodierung von Unicode, die zu ASCII abwärtskompatibel ist. Ein Zeichen kann dabei ein bis vier 8-Bit-Wörter einnehmen. Sieben-Bit-Varianten müssen nicht mehr verwendet werden, dennoch kann Unicode auch mit Hilfe von UTF-7 in sieben Bit kodiert werden. UTF-8 entwickelt sich (2011) zum einheitlichen Standard unter den meisten Betriebssystemen. So nutzen unter anderem Apples Mac OS X sowie einige Linux-Distributionen standardmäßig UTF-8, und immer mehr Webseiten werden in UTF-8 erstellt.

ASCII enthält nur wenige Zeichen, die allgemeinverbindlich zur Formatierung oder Strukturierung von Text verwendet werden; diese gingen aus den Steuerbefehlen der Fernschreiber hervor. Dazu zählen insbesondere der Zeilenvorschub (Linefeed), der Wagenrücklauf (Carriage Return), der horizontale Tabulator, der Seitenvorschub (Form Feed) und der vertikale Tabulator. In typischen ASCII-Textdateien findet sich neben den druckbaren Zeichen meist nur noch der Wagenrücklauf oder der Zeilenvorschub, um das Zeilenende zu markieren; dabei werden in DOS- und Windows-Systemen üblicherweise beide nacheinander verwendet, bei älteren Apple- und Commodore-Rechnern (ohne Amiga) nur der Wagenrücklauf und auf Unix-artigen sowie Amiga-Systemen nur der Zeilenvorschub. Die Verwendung weiterer Zeichen zur Textformatierung wird unterschiedlich gehandhabt. Zur Formatierung von Text werden inzwischen eher Markup-Sprachen wie zum Beispiel HTML verwendet.

ASCII-Tabelle

Die ASCII-Tabelle enthält alle Kodierungen des ASCII-Zeichensatzes; siehe Steuerzeichen für die Bedeutung der Abkürzungen:

DezHexOktASCII
00x00000NUL
10x01001SOH
20x02002STX
30x03003ETX
40x04004EOT
50x05005ENQ
60x06006ACK
70x07007BEL
80x08010BS
90x09011HT
100x0A012LF
110x0B013VT
120x0C014FF
130x0D015CR
140x0E016SO
150x0F017SI
160x10020DLE
170x11021DC1
180x12022DC2
190x13023DC3
200x14024DC4
210x15025NAK
220x16026SYN
230x17027ETB
240x18030CAN
250x19031EM
260x1A032SUB
270x1B033ESC
280x1C034FS
290x1D035GS
300x1E036RS
310x1F037US
DezHexOktASCII
320x20040SP
330x21041!
340x22042"
350x23043#
360x24044$
370x25045%
380x26046&
390x27047'
400x28050
410x29051 )
420x2A052*
430x2B053+
440x2C054,
450x2D055-
460x2E056.
470x2F057/
480x300600
490x310611
500x320622
510x330633
520x340644
530x350655
540x360666
550x370677
560x380708
570x390719
580x3A072:
590x3B073;
600x3C074<
610x3D075=
620x3E076>
630x3F077?
DezHexOktASCII
640x40100@
650x41101A
660x42102B
670x43103C
680x44104D
690x45105E
700x46106F
710x47107G
720x48110H
730x49111I
740x4A112J
750x4B113K
760x4C114L
770x4D115M
780x4E116N
790x4F117O
800x50120P
810x51121Q
820x52122R
830x53123S
840x54124T
850x55125U
860x56126V
870x57127W
880x58130X
890x59131Y
900x5A132Z
910x5B133[
920x5C134\
930x5D135]
940x5E136^
950x5F137_
DezHexOktASCII
960x60140`
970x61141a
980x62142b
990x63143c
1000x64144d
1010x65145e
1020x66146f
1030x67147g
1040x68150h
1050x69151i
1060x6A152j
1070x6B153k
1080x6C154l
1090x6D155m
1100x6E156n
1110x6F157o
1120x70160p
1130x71161q
1140x72162r
1150x73163s
1160x74164t
1170x75165u
1180x76166v
1190x77167w
1200x78170x
1210x79171y
1220x7A172z
1230x7B173{
1240x7C174|
1250x7D175}
1260x7E176~
1270x7F177DEL

Windows Codes

PositionKeywordFunktion
1MKALLalles markieren
3COPYKopieren
4FAVLesezeichen setzen
6FINDSuche
8RPLersetzen
9TABTabulator
10LFZeilenvorschub
13CRZeilenumbruch
14NEWneues Fenster
15OPENDokument öffnen oder Adresse eingeben
16PRINTDokument drucken
19SAVEDokument speichern
22INSEinfügen
23CWFenster schließen
24CUTAusschneiden
25LOOPWiederholen
26UNDOletzte Aktion rückgänging machen

C64 und C128

Es wird ein 8-Bit-System verwendet, das sich an ASCII orientiert und in Beschreibungen auch so bezeichnet wird.
Zur Unterscheidung wird stellenweise auch von PETSCII (Personal Electronic Transactor Standard Code for Information Interchange) gesprochen.

Steuercodes des MPS 803

HexDezCodeBeschreibung
088BSVorschaltcode für Graphik
0A10LFZeilenvorschub
0D13CRWagenrücklauf und neue Zeile
0E14EN ONdoppelte Breite
0F15EN OFFeinfache Breite
1016POSPosition (Spezifikation durch 2 nachfolgende Bytes)
1117CRSR DOWNGroß- und Kleinschreibung
1218RVS ONinvertierte Darstellung
1A26SUBBitmuster wiederholen (nachfolgendes Byte = Häufigkeit)
1B27ESCZählung in Punkten statt Zeichen
91145CRSR UPGroßbuchstaben und Semigraphik
92146RVS OFFInvertierung beenden

Die druckbaren Zeichen sind mit dem ASCII-Satz von C64 und C128 (im Prinzip) identisch.

vom C128 abweichende Steuercodes für den C64

NummerCodeBeschreibung
8DMSModusumschaltung blockieren
9EMSModusumschaltung erlauben

Zudem sind einige beim C128 definierten Codes ohne Wirkung.

Bildschirmcodes C64/C128

+0123456789101112131415 16171819202122232425262728293031
0@abcdefghijklmno pqrstuvwxyz[£]
32SP!"#$%&'()*+,-./ 0123456789:;<=>?
64ABCDEFGHIJKLMNO PQRSTUVWXYZ▒  π
96SSP
▒▒
▀▀

+128 ergibt die inverse Darstellung.
Ein Teil der Semigraphiksymbole hat keine Entsprechung in Unicode, deshalb sind die Tabelleneinträge nur Annäherungen.

C128 ASCII Graphic Mode

+0123456789101112131415
0  ULSTP  WHT BEL  TABLFDMS EMSCR TXTBLI
16 RVSHOM DEL    TSR  ESC REDGRNBLU
32SP!"# $%&' ()*+ ,-./
480123456789:; <=>?
64@ABCDEFGHIJKLMNO
80PQRSTUVWXYZ[ £]
96
112▒ π
128 ORNNURUN HLPF1F3F5 F7F2 F4F6 F8CR GRANBL
144BLKRVRCLR INSBRNLRDDGY MGYLGNLBLLGY PURYELCYN
160SSP
▒▒
176▀▀
192
208▒ π
224SSP
▒▒
240▀▀
π

Ein Teil der Semigraphiksymbole hat keine Entsprechung in Unicode, deshalb sind die Tabelleneinträge nur Annäherungen.

Unterschiede, die der Tabelle nicht zu entnehmen sind:
RETURN (Code 13, Hex 0D): Wagenrücklauf, Zeilenvorschub und Auswertung der Eingabe
SHIFT-RETURN (Code 141, Hex 8D): Wagenrücklauf und Zeilenvorschub ohne Auswertung der Eingabe
HOME (Code 19, Hex 13): Cursor in die linke obere Ecke setzen, Bildschirminhalt bleibt vorhanden
CLEAR (Code 147, Hex 93): Cursor in die linke obere Ecke setzen, Bildschirm wird mit Leerzeichen gefüllt
SPACE (Code 32, Hex 20): Leerzeichen als Textbestandteil
SHIFT-SPACE (Code 160, Hex A0): Füllzeichen für Tabellen, wird als Leerzeichen dargestellt (entspricht dem Nicht-Umbruch-Leerzeichen in HTML)

Die letzten 64 Zeichen (Codes 192-255) sind Alternativcodes von Zeichen, die bereits durch einen kleineren Wert definiert sind.
Interessanterweise wird Code 191 nicht wiederholt, stattdessen gibt es einen dritten Code für π (Zeichen 126).

C128 ASCII Business Mode

0-63 und 128-159 übereinstimmend mit Graphic Mode.
Es gibt weitere Übereinstimmungen, die allerdings keine vollen 16er-Blöcke abdecken.
+0123456789101112131415
64@abcdefghijklmno
80pqrstuvwxyz[ £]
96ABCDEFGHIJKLMNO
112PQRSTUVWXYZ▒ ▞
160SSP
▒▒
176▀▀
192ABCDEFGHIJKLMNO
208PQRSTUVWXYZ▒ ▞
224SSP
▒▒
240▀▀
▞

Die Anmerkungen im Abschnitt Graphic Mode gelten auch hier.

C128 Zeichensatz nach DIN 66003 (erweitert)

 ...0...1...2...3...4…5…6…7…8…9…A…B…C…D…E…F
0...  ULSTP  WHT BEL  TABLFDMS EMSCR TXTBLI
1... RVSHOM DEL    TSR  ESC REDGRNBLU
2...SP!"# $%&' ()*+ ,-./
3...0123456789:; <=>?
4...§A aB bC cD dE eF fG gH hI iJ jK kL lM mN nO o
5...P pQ qR rS sT tU uV vW wX xY yZ z[ \]_
6...`◥ A▔ B▄ C▗ D▝ E╰ F╯ G ▕ H▏ I▕ J╲ K⌊ L╱ M▔ N⌈ O
7...⌉ P◤ Q╭ R▖ S╮ T▏ U▔ V▘ W ▁ X▁ Y▏ Z
 Ä
⌋ Ö▒ Üπ
8... ORNNURUN HLPF1F3F5 F7F2 F4F6 F8CR GRANBL
9...BLKRVRCLR INSBRNLRDDGY MGYLGNLBLLGY PURYELCYN
A...SSPé£è´
B...@µàùâêîô û√ΣÄ äÖ öÜ üß^
C...`◥ A▔ B▄ C▗ D▝ E╰ F╯ G ▕ H▏ I▕ J╲ K⌊ L╱ M▔ N⌈ O
D...⌉ P◤ Q╭ R▖ S╮ T▏ U▔ V▘ W ▁ X▁ Y▏ Z
 Ä
⌋ Ö▒ Üπ
E...SSPé£è´
F...@µàùâêîô û√ΣÄ äÖ öÜ üßπ

Bei zwei Zeichen in einer Zelle ist links das Zeichen im Graphikmodus und rechts im Textmodus.