Was eine Zeichenkodierung ist
Eine Kodierung ist eine Vereinbarung: „Die Zahl 65 bedeutet den Buchstaben A“. Wenn du einen Text schreibst, speichert das Programm diese Zahlen; wenn eine andere Person ihn öffnet, übersetzt ihr Programm sie mit derselben Vereinbarung zurück in Buchstaben. Verwenden beide nicht dieselbe Tabelle, kommt der Text falsch an.
Zwei Ideen muss man trennen. Die eine ist der Zeichensatz, die Liste, welche Zahlen zu welchen Symbolen gehören. Die andere ist, wie diese Zahlen in Bytes gespeichert werden. Bei ASCII fallen beide auf triviale Weise zusammen; bei Unicode nicht, und da kommt UTF-8 ins Spiel.
ASCII: 128 Zeichen mit 7 Bit
ASCII (die Abkürzung steht für American Standard Code for Information Interchange) wurde in den 1960er-Jahren standardisiert. Es nutzt 7 Bit, also 2 hoch 7 = 128 Codes, von 0 bis 127. Davon sind 33 Steuerzeichen (0 bis 31 und 127) und 95 druckbar (32 bis 126, einschließlich Leerzeichen).
Es enthält keine Buchstaben mit Akzent, keine Umlaute und kein Eurozeichen: Es wurde für Englisch entworfen. Das erklärt, warum später weitere Tabellen nötig wurden.
| Steuerzeichen | Dezimal | Hexadezimal | Binär (7 Bit) | Wofür es dient |
|---|---|---|---|---|
| Null (NUL) | 0 | 00 | 0000000 | Markiert in mehreren Sprachen das Ende einer Zeichenkette |
| Horizontaler Tabulator (TAB) | 9 | 09 | 0001001 | Springt zum nächsten Tabstopp |
| Zeilenvorschub (LF) | 10 | 0A | 0001010 | Springt in die nächste Zeile |
| Wagenrücklauf (CR) | 13 | 0D | 0001101 | Geht an den Zeilenanfang zurück |
| Escape (ESC) | 27 | 1B | 0011011 | Leitet Steuersequenzen ein |
| Leerzeichen | 32 | 20 | 0100000 | Erstes druckbares Zeichen |
| Löschen (DEL) | 127 | 7F | 1111111 | Löscht das Zeichen |
Zusammenhänge, die du dir merken solltest
Die Tabelle ist nicht zufällig geordnet. Mit ein paar Regelmäßigkeiten kannst du Codes auswendig lesen.
- Die Ziffern „0“ bis „9“ belegen 48 bis 57 (30 bis 39 hexadezimal). Der Wert einer Ziffer ist ihr Code minus 48: Die „7“ ist 55, und 55 − 48 = 7.
- Die Großbuchstaben gehen von 65 („A“) bis 90 („Z“), die Kleinbuchstaben von 97 („a“) bis 122 („z“).
- Der Unterschied zwischen einem Großbuchstaben und seinem Kleinbuchstaben ist immer 32: „A“ = 65 und „a“ = 97; „C“ = 67 und „c“ = 99. Binär ändert sich nur ein Bit: 01000001 für „A“ und 01100001 für „a“.
- Um zu wissen, an welcher Stelle des Alphabets ein Großbuchstabe steht, ziehe 64 ab: „C“ ist 67 und 67 − 64 = 3, der dritte Buchstabe.
- Da alle Großbuchstaben (65 bis 90) kleinere Codes haben als die Kleinbuchstaben (97 bis 122), stellt eine alphabetische Ordnung „nach Code“ „Zebra“ vor „apfel“. Viele Programme brauchen eine eigene Vergleichsoption, um richtig zu sortieren.
Zeilenende: LF, CR und CRLF
Ein Zeilenumbruch wirkt einfach, wird aber je nach System unterschiedlich geschrieben. Unix, Linux und macOS verwenden ein einziges Zeichen, LF (10). Windows nutzt zwei hintereinander, CR und LF (13 und 10), bekannt als CRLF. Die alten Fernschreiber brauchten zwei verschiedene Befehle: den Wagen an den Anfang zurückbringen und das Papier um eine Zeile vorschieben.
Dieser Unterschied ist die Ursache für Dateien, die in einem einfachen Editor in einer einzigen Zeile erscheinen oder am Ende jeder Zeile ein seltsames Zeichen zeigen. Willst du wissen, welchen Code jedes hat, schreibe LF oder CR in die Suche der ASCII-Tabelle.
Das „erweiterte ASCII“ ist kein Standard
Da ein Byte 8 Bit hat und ASCII nur 7 nutzt, blieben 128 freie Codes (128 bis 255), und jeder Hersteller und jede Region füllte sie auf ihre Weise. Das nennt man „erweitertes ASCII“, aber es gibt keine einzelne Tabelle: Es gibt viele, sogenannte Codepages. Zwei der bekanntesten sind Latin-1 (ISO-8859-1), in der das é der Code 233 ist, und Windows-1252, ähnlich, aber mit Unterschieden bei den Codes 128 bis 159 (dort liegt zum Beispiel der Euro).
Das Problem: Der Code 233 bedeutet in einer Tabelle „é“ und in einer anderen etwas anderes. Ein Text, der mit einer Tabelle geschrieben und mit einer anderen gelesen wurde, zeigte Datenmüll. Unicode entstand, um dieses Durcheinander zu beenden.
Unicode und UTF-8
Unicode weist jedem Zeichen fast aller Schriftsysteme der Welt, dazu Symbolen und Emojis, eine eindeutige Zahl zu, den Codepunkt. Heute sind es mehr als 150.000 Zeichen. Er wird mit dem Präfix U+ und hexadezimal geschrieben: Das „A“ ist U+0041, das „ñ“ ist U+00F1, der Euro ist U+20AC und das lächelnde Gesicht ist U+1F600. Die ersten 128 Codepunkte sind genau die von ASCII.
UTF-8 ist die am häufigsten genutzte Art, diese Zahlen in Bytes zu speichern, und verwendet je nach Zeichen 1 bis 4. Die 128 von ASCII belegen ein einziges Byte, identisch zu früher, ein ASCII-Text ist also auch ein gültiger UTF-8-Text. Der Rest belegt mehr Bytes.
| Zeichen | Codepunkt | Bytes in UTF-8 | Bytes (hexadezimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| ä | U+00E4 | 2 | C3 A4 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Warum „ä“ statt „ä“ erscheint
Das ist der häufigste Fehler, und er hat eine exakte Erklärung. Das ä besteht in UTF-8 aus zwei Bytes: C3 und A4. Glaubt ein Programm, der Text sei in Latin-1, liest es jedes Byte als ein Zeichen: C3 ist „Ó und A4 ist „¤“. Ergebnis: „ä“. Dasselbe passiert mit „ö“, das als „ö“ erscheint, und mit „schön“, das als „schön“ angezeigt wird.
Die Lösung ist fast immer, dem Programm zu sagen, dass es die Datei als UTF-8 öffnen soll (in einem Texteditor oder in den Importeinstellungen einer Tabellenkalkulation). Passiert es umgekehrt, ein Latin-1-Text wird als UTF-8 gelesen, erscheinen meist Rauten mit Fragezeichen, weil diese einzelnen Bytes keine gültigen UTF-8-Folgen bilden.
So nutzt du die ASCII-Tabelle und den Umrechner
Das Tool „ASCII-Tabelle“ zeigt die 128 Zeichen mit ihrem Code dezimal, hexadezimal, oktal und binär sowie den Namen der Steuerzeichen.
- Gib in der Suche ein Zeichen, einen Code oder den Namen eines Steuerzeichens ein (zum Beispiel A, 65, 41 oder LF), um seine Zeile zu finden.
- Nutze die Filtertasten (Steuerzeichen, Ziffern, Großbuchstaben, Kleinbuchstaben, Zeichen), um nur eine Gruppe zu sehen.
- Zum Umrechnen schreibst du einen Text in „Text“ und wählst das Format (dezimal, hexadezimal, oktal oder binär): Unten erscheinen die Codes. „Hallo“ ergibt dezimal 72 97 108 108 111 und hexadezimal 48 61 6C 6C 6F.
- Du kannst es auch umgekehrt machen: Füge durch Leerzeichen oder Kommas getrennte Codes in „Codes“ ein, und der Text entsteht. Hexadezimal werden Präfixe wie 0x41 akzeptiert.
Enthält der Text Zeichen, die nicht zu ASCII gehören, etwa das ä, weist das Tool darauf hin und zeigt ihren Unicode-Code. Um die echten Bytes in UTF-8 zu sehen, nutze „Text in Binär“: Das ä ergibt 11000011 10100100, zwei Bytes aus je 8 Bit. Die Grenzen: Die Tabelle zeigt nur das Standard-ASCII, nicht das erweiterte, und alles wird in deinem Browser berechnet, ohne den Text an einen Server zu senden.
Häufige Fragen
Wie viele Zeichen hat ASCII?
128, mit Codes von 0 bis 127 und je 7 Bit. Davon sind 33 Steuerzeichen und 95 druckbar, das Leerzeichen eingerechnet.
Wie lautet der ASCII-Code des Buchstabens A und des a?
Das „A“ ist 65 (41 hexadezimal, 01000001 binär) und das „a“ ist 97 (61 hexadezimal, 01100001 binär). Sie unterscheiden sich immer um 32.
Was ist der Unterschied zwischen ASCII und Unicode?
ASCII hat 128 Zeichen, gedacht für Englisch. Unicode hat mehr als 150.000, aus fast allen Sprachen und Emojis, und seine ersten 128 sind dieselben wie bei ASCII.
Was ist UTF-8?
Es ist die am häufigsten genutzte Art, Unicode-Text in Bytes zu speichern. Es verwendet 1 bis 4 Bytes pro Zeichen: Die von ASCII belegen eines, ein ä zwei und ein Emoji vier.
Warum zeigt mein Text „ä“ oder „ö“?
Weil ein in UTF-8 gespeicherter Text als Latin-1 gelesen wird. Öffne die Datei mit Angabe der Kodierung UTF-8, dann ist es behoben.