# ASCII (tekenset)

ASCII (American Standard Code for Information Interchange), ook US-ASCII en ANSI_X3.4-1968 genoemd, is een standaard 7-bits-tekencodering om Latijnse letters, cijfers, leestekens en enkele andere tekens en stuurcodes te representeren en aan ieder teken in die reeks een geheel getal te koppelen, waarmee dat teken kan worden aangeduid. De code werd ontworpen door een commissie met o.a. Hugh McGregor Ross en Bob Bemer.

## Standaard-ASCII

De standaard ASCII-tabel (later ook wel ASCII-I genoemd) bestaat uit de 94 zichtbare tekens (hoofdletters en kleine letters, cijfers, leestekens en enkele andere symbolen), de spatie, en 33 stuurcodes. De stuurcodes representeren geen zichtbare tekens, maar zijn opdrachten aan uitvoerapparaten of geven informatie over de gegevens die verstuurd worden.
Van de stuurcodes komen met name carriage return en/of line feed in vrijwel elke platte tekst voor.
De ASCII codes zijn oorspronkelijk ontworpen voor telexcommunicatie. Sommige stuurcodes herinneren er nog aan dat de uitvoer vroeger niet op een beeldscherm werd getoond, maar met een TTY, een door een computer aangestuurde soort typemachine, op papier werd afgedrukt. Het teken bell deed dan ook werkelijk de bel van de teletype rinkelen, en een carriage return deed de wagen teruglopen, net als bij een typemachine.
De laatste code, DEL, bestaat binair uit zeven enen. Deze code werd bij het lezen van ponsband genegeerd, zodat deze kon worden gebruikt om een fout te herstellen: als men per ongeluk het verkeerde teken had ingeponst, ponste men er eenvoudig een DEL (met overal gaten) overheen, zodat het verkeerde teken werd gewist.
De 128 ASCII-codes zijn te zien in de tabellen rechts en onder.
De 94 zichtbare tekens en de spatie, en hun representaties als byte, zijn inmiddels exact hetzelfde overgenomen in uitbreidingen zoals Windows-1252, ISO 8859-1 en UTF-8.

## Tabel van ASCII-codes

| Besturingscodes | Besturingscodes | Besturingscodes | Besturingscodes | Besturingscodes | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete | spatie, afdrukbare tekens en delete |
| Dec | Oct | Hex | Binair | Teken | Dec | Oct | Hex | Binair | Teken | Dec | Oct | Hex | Binair | Teken | Dec | Oct | Hex | Binair | Teken |
| 0 | 000 | 00 | 0000000 | NUL (Null) | 32 | 040 | 20 | 0100000 | SP | 64 | 100 | 40 | 1000000 | @ | 96 | 140 | 60 | 1100000 | ` |
| 1 | 001 | 01 | 0000001 | SOH (Start of Header) | 33 | 041 | 21 | 0100001 | ! | 65 | 101 | 41 | 1000001 | A | 97 | 141 | 61 | 1100001 | a |
| 2 | 002 | 02 | 0000010 | STX (Start of Text) | 34 | 042 | 22 | 0100010 | " | 66 | 102 | 42 | 1000010 | B | 98 | 142 | 62 | 1100010 | b |
| 3 | 003 | 03 | 0000011 | ETX (End of Text) | 35 | 043 | 23 | 0100011 | # | 67 | 103 | 43 | 1000011 | C | 99 | 143 | 63 | 1100011 | c |
| 4 | 004 | 04 | 0000100 | EOT (End of Transmission) | 36 | 044 | 24 | 0100100 | $ | 68 | 104 | 44 | 1000100 | D | 100 | 144 | 64 | 1100100 | d |
| 5 | 005 | 05 | 0000101 | ENQ (Enquiry) | 37 | 045 | 25 | 0100101 | % | 69 | 105 | 45 | 1000101 | E | 101 | 145 | 65 | 1100101 | e |
| 6 | 006 | 06 | 0000110 | ACK (Acknowledgement) | 38 | 046 | 26 | 0100110 | & | 70 | 106 | 46 | 1000110 | F | 102 | 146 | 66 | 1100110 | f |
| 7 | 007 | 07 | 0000111 | BEL (Bell) | 39 | 047 | 27 | 0100111 | ' | 71 | 107 | 47 | 1000111 | G | 103 | 147 | 67 | 1100111 | g |
| 8 | 010 | 08 | 0001000 | BS (Backspace) | 40 | 050 | 28 | 0101000 | ( | 72 | 110 | 48 | 1001000 | H | 104 | 150 | 68 | 1101000 | h |
| 9 | 011 | 09 | 0001001 | HT (Horizontal Tab) | 41 | 051 | 29 | 0101001 | ) | 73 | 111 | 49 | 1001001 | I | 105 | 151 | 69 | 1101001 | i |
| 10 | 012 | 0A | 0001010 | LF (Line Feed) | 42 | 052 | 2A | 0101010 | * | 74 | 112 | 4A | 1001010 | J | 106 | 152 | 6A | 1101010 | j |
| 11 | 013 | 0B | 0001011 | VT (Vertical Tab) | 43 | 053 | 2B | 0101011 | + | 75 | 113 | 4B | 1001011 | K | 107 | 153 | 6B | 1101011 | k |
| 12 | 014 | 0C | 0001100 | FF (Form Feed) | 44 | 054 | 2C | 0101100 | , | 76 | 114 | 4C | 1001100 | L | 108 | 154 | 6C | 1101100 | l |
| 13 | 015 | 0D | 0001101 | CR (Carriage Return) | 45 | 055 | 2D | 0101101 | - | 77 | 115 | 4D | 1001101 | M | 109 | 155 | 6D | 1101101 | m |
| 14 | 016 | 0E | 0001110 | SO (Shift Out) | 46 | 056 | 2E | 0101110 | . | 78 | 116 | 4E | 1001110 | N | 110 | 156 | 6E | 1101110 | n |
| 15 | 017 | 0F | 0001111 | SI (Shift In) | 47 | 057 | 2F | 0101111 | / | 79 | 117 | 4F | 1001111 | O | 111 | 157 | 6F | 1101111 | o |
| 16 | 020 | 10 | 0010000 | DLE (Data Link Escape) | 48 | 060 | 30 | 0110000 | 0 | 80 | 120 | 50 | 1010000 | P | 112 | 160 | 70 | 1110000 | p |
| 17 | 021 | 11 | 0010001 | DC1 (Device Control 1 (XON)) | 49 | 061 | 31 | 0110001 | 1 | 81 | 121 | 51 | 1010001 | Q | 113 | 161 | 71 | 1110001 | q |
| 18 | 022 | 12 | 0010010 | DC2 (Device Control 2) | 50 | 062 | 32 | 0110010 | 2 | 82 | 122 | 52 | 1010010 | R | 114 | 162 | 72 | 1110010 | r |
| 19 | 023 | 13 | 0010011 | DC3 (Device Control 3 (XOFF)) | 51 | 063 | 33 | 0110011 | 3 | 83 | 123 | 53 | 1010011 | S | 115 | 163 | 73 | 1110011 | s |
| 20 | 024 | 14 | 0010100 | DC4 (Device Control 4) | 52 | 064 | 34 | 0110100 | 4 | 84 | 124 | 54 | 1010100 | T | 116 | 164 | 74 | 1110100 | t |
| 21 | 025 | 15 | 0010101 | NAK (Negative Acknowledgement) | 53 | 065 | 35 | 0110101 | 5 | 85 | 125 | 55 | 1010101 | U | 117 | 165 | 75 | 1110101 | u |
| 22 | 026 | 16 | 0010110 | SYN (Synchronous Idle) | 54 | 066 | 36 | 0110110 | 6 | 86 | 126 | 56 | 1010110 | V | 118 | 166 | 76 | 1110110 | v |
| 23 | 027 | 17 | 0010111 | ETB (End of Transmission Block) | 55 | 067 | 37 | 0110111 | 7 | 87 | 127 | 57 | 1010111 | W | 119 | 167 | 77 | 1110111 | w |
| 24 | 030 | 18 | 0011000 | CAN (Cancel) | 56 | 070 | 38 | 0111000 | 8 | 88 | 130 | 58 | 1011000 | X | 120 | 170 | 78 | 1111000 | x |
| 25 | 031 | 19 | 0011001 | EM (End of Medium) | 57 | 071 | 39 | 0111001 | 9 | 89 | 131 | 59 | 1011001 | Y | 121 | 171 | 79 | 1111001 | y |
| 26 | 032 | 1A | 0011010 | SUB (Substitute) | 58 | 072 | 3A | 0111010 | : | 90 | 132 | 5A | 1011010 | Z | 122 | 172 | 7A | 1111010 | z |
| 27 | 033 | 1B | 0011011 | ESC (Escape) | 59 | 073 | 3B | 0111011 | ; | 91 | 133 | 5B | 1011011 | [ | 123 | 173 | 7B | 1111011 | { |
| 28 | 034 | 1C | 0011100 | FS (File Separator) | 60 | 074 | 3C | 0111100 | < | 92 | 134 | 5C | 1011100 | \ | 124 | 174 | 7C | 1111100 | | |
| 29 | 035 | 1D | 0011101 | GS (Group Separator) | 61 | 075 | 3D | 0111101 | = | 93 | 135 | 5D | 1011101 | ] | 125 | 175 | 7D | 1111101 | } |
| 30 | 036 | 1E | 0011110 | RS (Record Separator) | 62 | 076 | 3E | 0111110 | > | 94 | 136 | 5E | 1011110 | ^ | 126 | 176 | 7E | 1111110 | ~ |
| 31 | 037 | 1F | 0011111 | US (Unit Separator) | 63 | 077 | 3F | 0111111 | ? | 95 | 137 | 5F | 1011111 | _ | 127 | 177 | 7F | 1111111 | DEL |

## Bijzonderheden
### Algemeen

De cijfers bestaan uit hun binaire representatie, voorafgegaan door '011'. De letters staan op alfabetische volgorde, waardoor het eenvoudig is een tekst te alfabetiseren. Dit geldt niet voor de tekens met accenten die later zijn toegevoegd. Bovenkast verschilt slechts één bit (bit 5) met onderkast; dit maakt dat omzetten van kast en kastloos vergelijken een bit-operatie wordt en daardoor erg snel. Dit geldt niet voor Unicode, waar geen vast verschil is en bovendien gebruiken niet alle talen dezelfde omzetting.

### Internationaal

In veel talen heeft men niet genoeg aan 26 letters. Daarom werden in sommige talen wijzigingen in de tabel aangebracht. In de Duitse tabel ontbreken de 'overbodige' tekens [\] en {|} - ze zijn vervangen door äöü en ÄÖÜ. In de Britse tabel is het hekje (#) vervangen door een pondteken (£).

### Software

Het vervangen van tekens gaf weleens problemen met het programmeren van computers, omdat de 'overbodige' tekens daar wel gebruikt worden. Een ander probleem ontstond als de verkeerde karaktertabel werd gebruikt; zo was het niet goed mogelijk de Duitse teletekstpagina's te bekijken met een televisietoestel dat gemaakt was voor een ander land.

## Uitbreiding met 8e bit

ASCII is een 7-bits-code, zodat er 2$^7$ = 128 ASCII-codes mogelijk zijn. De meeste computers werken echter met 8-bits-codes (bytes). De 8e bit werd traditioneel gebruikt voor pariteit en andere apparaatspecifieke toepassingen. In eerste instantie bestond de extra verzameling beschikbare tekens uit gangbare accenten op het Latijnse schrift en diverse grafische tekens, zoals blokken, lijnen en rasters, waarmee onder meer goed ogende menu's getoond konden worden. Deze eerste uitgebreide tekenverzameling stond bekend als de ASCII-II tabel.
Omdat in landen buiten de Verenigde Staten behoefte was aan extra tekens, zoals andere letters, letters met accenten, valutasymbolen en figuurtjes, werd het aantal mogelijke tekens vergroot door ook de 8e bit te gebruiken; dit gaf tweemaal zo veel mogelijkheden, namelijk 2$^8$ = 256. Zo ontstonden de extended ASCII-tekenverzamelingen. Extended ASCII is trouwens niet één bepaalde standaard, evenmin als primair ASCII (zie de vorige paragraaf), maar een verzamelnaam voor de verschillende tekenrepresentaties die de 95 afdrukbare ASCII-tekens als basis hebben, zoals Windows-1252.
De bekendste uitbreiding is die van de originele IBM PC, genaamd code page 437. Deze wordt nog steeds ondersteund door de tekengenerator op een videokaart en omvat:
| Dec | Oct | Hex | Binair | Code |
| 128-154 | 200-232 | 80-9A | 10000000-10011010 | diverse letters met diakrieten |
| 155-159 | 233-237 | 9B-9F | 10011011-10011111 | valutasymbolen |
| 160-168 | 240-250 | A0-A8 | 10100000-10101000 | letters met diakrieten (Spaans) |
| 169-170 | 251-252 | A9-AA | 10101001-10101010 | negatiesymbolen |
| 171-172 | 253-254 | AB-AC | 10101011-10101100 | breuken |
| 173 | 255 | AD | 10101101 | omgekeerd uitroepteken ¡ |
| 174-175 | 256-257 | AE-AF | 10101110-10101111 | Franse aanhalingstekens |
| 176-178 | 260-262 | B0-B2 | 10110000-10110010 | rasters |
| 179-218 | 263-332 | B3-DA | 10110011-11011010 | lijntjes |
| 219-223 | 333-337 | DB-DF | 11011011-11010000 | blokjes |
| 224-253 | 340-375 | E0-FD | 11100000-11111101 | wiskundige symbolen |
| 254-255 | 376-377 | FE-FF | 11111110-11111111 | blokjes |

## ASCII-art

* Met behulp van de vorm van de tekens kunnen afbeeldingen gemaakt worden, dit heet ASCII-art. In het (ongemodificeerde) spel Dwarf Fortress is de gehele spelwereld uit ASCII tekens opgebouwd.