ASCII karakterset tabel
ASCII, de geschiedenis
De meest gebruikte computer standaard is zonder twijfel ASCII, the American Standard Code for Information Interchange. Toen men begon met computers te ontwikkelen kwam automatisch de noodzaak op om bepaalde vormen van informatie in een digitaal formaat te definiëren. Voor getallen was dit relatief eenvoudig, maar tekst bleek veel moeilijker te zijn. Morse code was ontwikkeld in de 19e eeuw, maar dat kon niet eenvoudig worden aangepast aan het binaire systeem in computers omdat de codes die voor karakters werden gebruikt niet allemaal dezelfde lengte hadden en er bovendien geen duidelijke sorteer methode voor beschikbaar was. IBM kwam i
IBM kwam in de zestiger jaren van de vorige eeuw met haar eigen oplossing EBCDIC, Extended Binary Coded Decimal Interchange Code voor toepassing op haar mainframes en de AS/400 systemen. Maar dit systeem had een aantal problemen. De letters van het alfabet waren geplaatst in blokken, wat niet erg handig is voor sorteren. Op hetzelfde moment dat IBM met haar EBCDIC oplossing kwam, creëerden andere computer ontwikkelaars hun eigen oplossingen.
Het werd duidelijk dat de uitwisselen van gegevens tussen verschillende computer systemen een groot probleem zou worden als deze diversiteit niet zou stoppen. Het was daarom dat Bob Bemer—nu vaak de Father of ASCII genoemd—alle bestaande verschillende codeersystemen compileerde in een grote lijst. Deze lijst zorgde ervoor dat computer fabrikanten zich gingen realiseren dat snel iets aan deze situatie moest worden gedaan. Bob Bemer startte standaardisatie commissies, en de eerste implementatie van ASCII werd in 1963 geïntroduceerd. Aanvullingen voor buitenlandse talen werden in ASCII in 1967 toegevoed en in 1968 werd het eindelijk een officiële overheidsstandaard.
Tegenwoordig gebruiken bijna 100% van alle computers de ASCII codering als het primaire codeer systeem. Toevoegingen voor buitenlandse talen zijn allemaal gecodeerd als een uitbreiding op ASCII. Daarom kan zonder meer worden gesteld, dat ASCII de meest gebruikte computerstandaard in de wereld is.
ASCII tekenset tabel
De ASCII tekenset is de standaard geworden in het uitwisselen van informatie. De eerste 32 karakters en het laatste zijn controlecodes, de andere karakters kunnen normaal worden geprint. De controlecodes DC1 (XON) en DC3 (XOFF) worden gebruikt bij software flow control toepassingen. In de volgende tabellen is de ASCII karakterset te zien, samen met de betekenis van de controlecodes.
– | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
0 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL |
8 | BS | HT | LF | VT | FF | CR | SO | SI |
16 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB |
24 | CAN | EM | SUB | ESC | FS | GS | RS | US |
32 | SP | ! | “ | # | $ | % | & | ‘ |
40 | ( | ) | * | + | , | – | . | / |
48 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
56 | 8 | 9 | : | ; | = | > | ? | |
64 | @ | A | B | C | D | E | F | G |
72 | H | I | J | K | L | M | N | O |
80 | P | Q | R | S | T | U | V | W |
88 | X | Y | Z | [ | \ | ] | ^ | _ |
96 | ` | a | b | c | d | e | f | g |
104 | h | i | j | k | l | m | n | o |
112 | p | q | r | s | t | u | v | w |
120 | x | y | z | { | | | } | ~ | DEL |
ASCII controle codes in detail
- 0 – NUL – Null character
-
Het NUL karakter in de ASCII karakterset was oorspronkelijk bedoeld als een NOP, een karakter om genegeerd te worden. Dit zou handig zijn bij ponsbanden waar additionele informatie zou moeten worden toegevoegd tussen bestaande informatie. Op sommige printers werd echter de NUL in plaats daarvan als een spatie geïmplementeerd. Later werd het null karakter nog aanzienlijk belangrijker omdat het werd gedefiniëerd als het karakter om het einde van een string te markeren in de C programmeertaal. Dit maakte het mogelijk om strings met oneindige lengte te definiëren in programmeertalen. Tot dan toe definiëerden de meeste programmeertalen zoals Pascal een string als een lengte indicator, gevolgd door een array dat de karakters bevat.
- 1 – SOH – Start of heading
-
Als de communicatie voornamelijk bestaat uit commando’s of berichten, dan kan de SOH worden gebruikt om het begin van elke boodschapkop aan te geven. In de originele 1963 definitie van de ASCII standaard werd de naam start of message gebruikt, die werd hernoemd tot start of heading in de uiteindelijke release. Tegenwoordig zien we SOH vaak in seriële RS232 communicatie wanneer er sprake is van een master-slave configuratie. Elk commando van de master start met een SOH. Dit maakt het mogelijk voor de aangesloten slaves om te hersynchroniseren op het volgende commando wanneer er communicatiefouten zijn opgetreden. Zonder een duidelijke markering van de start van elk commando kan een hersynchronisatie moeilijk te implementeren zijn.
- 2 – STX – Start of text
3 – ETX – End of text -
Een berichten-gebasseerd communicatieprotocol zal waarschijnlijk boodschappen gebruiken met een kop waarin adres informatie is verwerkt, gevolg door de actuele inhoud. De ASCII STX geeft de start van het inhoudsblok aan van een dergelijk bericht. Deze controle code sluit automatisch een eventueel voorafgaande header af. Dat betekent dat er geen controle code is voor het afsluiten van een kop die is gestart door SOH. Het einde van het bericht wordt aangegeven met het controle karakter ETX. De actuele inhoud van een bericht wordt niet door de ASCII standaard gedefiniëerd en is protocol afhankelijk. Interessant om op te merken is, dat in het 1963 voorstel van de standaard de naamgeving afwijkend was. STX werd in dit voorstel EOA, end of address genoemd en ETX ging door het leven als EOM, end of message. Dit kwam omdat in het originele voorstel een bericht altijd werd omgeven door een start en stop controle karakter. De nieuwe definitie liet ook de mogelijkheid toe om alleen de SOH te gebruiken om een commando met een vaste lengte te versturen, zonder de noodzaak van een eindcode. In feite zien we in huidige seriële protocollen dit vaak gebruikt waarbij berichten van vaste lengte verzonden worden zonder scheiding tussen de kop en de inhoud.
- 4 – EOT – End of transmission
- 5 – ENQ – Enquiry
- 6 – ACK – Acknowledgment
- 7 – BEL – Audible bell
-
De BEL code is een interessante in de ASCII karakterset, omdat het niet primair gebruikt wordt voor data codering of randapparatuur sturing. In plaats daarvan wordt het gebruikt om de menselijke aandacht te trekken met een hoorbaar geluid. Het was bedoeld om zowel op computers als op randapparatuur zoals printers te gebruiken. In de programmeertaal C wordt de controle code \a gebruikt voor het belsignaal.
- 8 – BS – Backspace
-
De functie van de backspace is in de loop der tijd veranderd. In de begintijd was het voornamelijk bedoeld om de cursor één positie terug te verplaatsen op printers en teletypes om accenten op letters mogelijk de maken. Om bijvoorbeeld het karakter â te maken zou de code rij aBS^ naar de printer gestuurd kunnen worden. Deze methode was een praktische kopie van de methode hoe letters met accenten op mechanische typemachines werden gegenereerd. Maar toen beeldschermen werden geïntroduceerd werd deze methodiek niet langer ondersteund. Daarom wordt de backspace tegenwoordig meestal niet alleen gebruikt om de cursor te verplaatsen, maar ook om de actuele inhoud op die positie te verwijderen. Deze controle code is in de C programmeertaal aanwezig als \b.
- 9 – HT – Horizontal tab
-
De HT controle code in de ASCII karakterset is gedefiniëerd voor layout doeleinden. Het geeft een commando aan het uitvoerapparaat om door te gaan naar de volgende tabel kolom. De breedte van tabel kolommen is flexibel, maar bij veel randapparaten wordt een standaard waarde van 8 gebruikt. Het gebruik van de horizontal tab vermindert niet alleen het werk van datatypistes, maar introduceerde ook een methode om de hoeveelheid opslagruimte voor geformateerde teksten te beperken. We lachen hier nu om, maar houd in het achterhoofd dat de ASCII standaard 40 jaar geleden werd ontwikkeld toen elke byte opslagruimte waardevol was en compressiemethodes zoals ZIP nog niet bestonden. Het controle karakter HT is aanwezig als \t in de C programmeertaal.
- 10 – LF – Line feed
-
Het line-feed karakter is één van de karakters in de ASCII karakter set dat misbruikt is. Origineel was het LF karakter bedoed om de kop van de printer één regel naar beneden te bewegen. Een tweede controle karakter CR zou dan moeten worden gebruikt om de printkop naar de linker kantlijn te verplaatsen. Dit is de manier waarop het geimplementeerd is in vele seriele protocollen en in besturingssystemen zoals MS-DOS en Windows. Aan de andere kan herdefinieerde de C programmeertaal en het Unix besturingssysteem dit karakter als newline dat een combinatie van de line feed en de carriage return inhield. Er valt over te discussieren welke implementatie foutief is. De manier waarop C en Unix het oplossen is zonder meer een natuurlijker methode vanuit een programmeer standpunt. Aan de andere kant ligt de MS-DOS implementatie dichter bij de originele definitie. Het was beter geweest als zowel line feed, als newline beiden onderdeel waren geweest van de originele ASCII definitie omdat de eerste een typische code is voor randapparaat aansturing, terwijl de laatste een logisch tekstscheidingsteken is. Maar helaas is deze scheiding niet aanwezig. Tegenwoordig gebruiken mensen het LF karakter meestal als newline functie en de meeste software die platte ASCII tekst bestanden verwerken zijn in staat om zowel losse LF, als gecombineerde CR/LF karakters te verwerken. Dit controle karakters is in de programmeertaal C beschikbaar als \n.
- 11 – VT – Vertical tab
-
De vertical-tab is net zoals de horizontal tab gedefiniëerd om de hoeveelheid werk voor het creëren van layouts te verminderen, en ook om de opslagruimte van geformateerde teksten te verminderen. De VT controle code wordt gebruikt om te springen naar de volgende gemarkeerde regel. Om eerlijk te zijn heb ik nog nooit een situatie of programma gezien waar deze functionaliteit was geïmplementeerd. In de meeste gevallen wordt in plaats hiervan een rij van LF codes gebruikt.
- 12 – FF – Form feed
-
De form-feed code FF is ontworpen om printers aan te sturen. Wanneer een dergelijke code ontvangen wordt laadt de printer het volgende vel papier. Het gedrag van de controle code op terminals hangt af van de implementatie. Sommige terminals maken het scherm schoon, terwijl anderen alleen het karakter ^L laten zien, of in plaats daarvan een line feed uitvoeren. De shell omgevingen Bash en Tcsh hebben de ASCII form feed geimplementeerd als een clear screen commando. De form feed is aanwezig als \f in de C programmeertaal.
- 13 – CR – Carriage return
-
De carriage-return in de ASCII karakter verzameling is in zijn originele vorm bedoeld om de printkop terug te brengen naar de linker kantlijn, zonder naar de volgende regel te gaan. Later is deze code ook toegewezen aan de enter toets op toetsenborden om aan te geven dat de invoer van tekst is voltooid. Met scherm georienteerde representatie van gegevens wilden mensen dat entering data ook zou impliceren dat de cursor naar de volgende regel zou verplaatsen. Daarom heeft in de C programmeertaal en unix besturingssysteem een herdefinitie van de LF controle code plaatsgevonden naar newline. Tegenwoordig vertaalt software vaak ongemerkt een ge-enterde CR naar de LF ASCII code wanneer de data wordt opgeslagen.
- 14 – SO – Shift out
15 – SI – Shift in -
Zelfs zo vroeg als in de zestiger jaren begrepen de mensen die de ASCII karakterverzameling definieerden dat het waardevol was om de karakterset niet alleen geschikt te maken voor het Engelse alfabet, maar ook voor buitenlandse versies. De shift in en shift out werden gedefinieerd voor dit doel. Origineel waren de codes bedoeld om te schakelen tussen het cyrillische en latijnse alfabet. De cyrillische ASCII definitie die de shift karakters gebruikt is KOI-7. Later werden deze controle karakters ook gebruikt om het lettertype van printers te wijzigen. In dit gebruik levert SO karakters van dubbele breedte terwijl gecomprimeerde karakters worden geselecteerd met SI.
- 16 – DLE – Data link escape
-
Het is in bepaalde gevallen noodzakelijk om in een doorgaande data communicatie controle karakters te verzenden. Er zijn situaties waarbij deze controle karakters zouden kunnen worden geïnterpreteerd als onderdeel van de normale datastroom. De DLE is gedefiniëerd in de ASCII standaard voor deze situaties. Als dit karakter in de datastroom wordt gedetecteerd, dan weet de ontvangende partij dat één of meer van de erop volgende karakters moeten worden geïnterpreteerd op een andere manier dan de andere karakters in de stroom. De exacte interpretatie van de erop volgende katakters is geen onderdeel van de ASCII definitie. Slechts de mogelijkheid om uit te breken, of op zijn Engels data link escape is gecreëerd. In het Hayes communicatieprotocol voor modems is de data link escape gedefiniëerd als stilte+++stilte Het is mijn mening dat het een beter idee was geweest wanneer het Hayes protocol in plaats daarvan de DLE had gebruikt, omdat hiet niet in communicatiestilte ingebed behoeft te worden, en het zou passen binnen een al bestaande standaard. De ontwikkelaars bij Hayes hebben echter anders besloten en nu wordt de +++ tekenrij veel vaker toegepast dan de originele DLE.
- 17 – DC1 – Device control 1 / XON – Transmission on
-
Hoewel origineel gedefinieerd als DC1 is deze ASCII controle code nu beter bekend als de XON code die gebruikt wordt voor software flow control in seriële communicatie. Het belangrijkste gebruik is het herstarten van de transmissie nadat de communicatie is gestopt door de XOFF controle code. Wie vroeger gewerkt heeft met seriële terminals zal zich misschien herinneren dat het soms hielp—wanneer data errors optraden—om op de Ctrl-Q toets te drukken. Dit is omdat deze toetsencombinatie in feite de XON controle code genereert, die een geblokkeerde communicatie weer op gang brengt wanneer de host of terminal per ongeluk een foutief karakter had geïnterpreteerd als XOFF.
- 18 – DC2 – Device control 2
- 19 – DC3 – Device control 3 / XOFF – Transmission off
- 20 – DC4 – Device control 4
- 21 – NAK – Negative acknowledgment
- 22 – SYN – Synchronous idle
- 23 – ETB – End of transmission block
- 24 – CAN – Cancel
- 25 – EM – End of medium
-
De EM wordt gebruikt aan het einde van een serieel opslag medium zoals een ponsband of magnetische tape. Het geeft het logische einde van de gegevens aan. Dit is niet noodzakelijkerwijze ook het fysieke einde van de datadrager.
- 26 – SUB – Substitute character
- 27 – ESC – Escape
-
Het escape karakter is één van de uitvindingen in de ASCII standaard die werd voorgesteld door Bob Bemer. Het wordt gebruikt om het begin aan te geven van een uitgebreide rij controle karakters. Op deze manier was het niet noodzakelijk om alle noodzakelijke controle coders op te nemen in de ASCII standaard. Wanneer nieuwe technologieën nieuwe controle commandos zouden behouven, dan zou de ESC gebruikt kunnen worden als het start karakter van deze multi-karakter commando’s. Escape codes worden veelvuldig gebruikt in printers en terminals voor apparaat specificieke instellingen zoals fonts, tekst positionering en kleuren. Als ESC niet in de ASCII standaard aanwezig was geweest, dan was de standaard waarschijnlijk vrij snel daarna opgevolgd door een nieuwe standaard. De escape mogelijkheid gaf ontwikkelaars letterlijk de mogelijkheid te ontvluchten van de standaard waar nodig, maar om diezelfde standaard waar mogelijk te gebruiken.
- 28 – FS – File separator
-
De file separator FS is een interessante controle code, omdat het ons inzicht geeft in de manier waarop computertechnologie in de jaren zestig was georganiseerd. We zijn nu gewend aan random access media zoals RAM en magnetische disks, maar toen de ASCII standaard werd gedefinieerd was de meeste data serieel. Ik spreek hier niet alleen over seriële communicatie, maar ook over seriële opslag zoals ponskaarten, ponsbanden en magnetische tapes. In een dergelijke situatie is het overduidelijk efficiënt om een enkelvoudige controle code te gebruiken om de scheiding aan te geven tussen twee bestanden. De FS was voor dit doel gedefiniëerd.
- 29 – GS – Group separator
-
Gegevensopslag was één van de belangrijke redenen waarom een aantal controle codes in de ASCII definitie terecht zijn gekomen. Databases bestaan meestal uit tabellen waarin records voorkomen. Alle records van één tabel hebben het zelfde type, maar records van verschillende tabellen kunnen onderling in layout verschillen. De groep separator GS is gedefinieerd om tabellen te scheiden in een serieel data opslag systeem. Merk op dat het woord tabel op dat moment nog niet werd gebruikt en dat de ASCII ontwikkelaars het een groep noemden.
- 30 – RS – Record separator
-
Binnen een groep (of tabel) worden de records gescheiden met een RS of record separator.
- 31 – US – Unit separator
-
De kleinste datagegevens die in een database opgeslagen zijn worden units genoemd in de ASCII definitie. We zouden het tegenwoordig een veld noemen. De unit separator scheidt deze velden in een seriële dataopslag omgeving. De meeste huidige database implementaties hebben een vaste veld lengte nodig. Er wordt voldoende ruimte in het record gereserveerd voor het grootst mogelijke gegeven voor elk veld op te slaan, zelfs als dat in de meeste gevallen niet noodzakelijk is. Dit kost een grote hoeveelheid ruimte in de veel situaties. De US controle code staat doe dat alle variabelen een variabele lengte hebben. Als dataopslag ruimte gelimiteerd is—zoals in de zestiger jaren—dan is dit een goede manier om kostbare ruimte uit te sparen. Aan de andere kant is seriële opslag veel minder efficiënt dan de tabel gestuurde RAM en disk implementaties van de moderne tijd. Ik kan me de situatie niet voorstellen waar moderne SQL databases werken op basis van gegevens die opgeslagen zijn op ponsbanden of magnetische tapes…
- 32 – SP – White space
-
Er valt over te twisten of de spatie een echt controle karakter is, omdat het zo vaak gebruikt wordt in reguliere teksten. Maar, net zoals de horizontale tab en de backspace controle karakters in de ASCII karakterset worden genoemd, denk ik dat het het meest natuurlijke is om de white space of forward space ook een controle karakter te noemen. Uiteindelijk representeert het niet een karakter zelf, maar een commando aan het uitvoerapparaat om één positie voorwaarts te bewegen waarbij de informatie in het huidige veld geleegd wordt. In veel programmatuur zoals tekstverwerkers is de spatie bovendien een karakter dat lijnen kan laten afbreken, en web browsers combineren meerdere spaties tot slechts één uitvoerkarakter. Dit versterkt mijn geloof dat het niet slechts een uniek karakter representeert, maar een informatiedrager is voor apparatuur en applicaties.
- 127 – DEL – Delete
-
Je kunt je afvragen waarom alle controle codes in de ASCII karakterset lage waarden hebben, terwijl de DEL controle code de waarde 127 heeft. Dit is, omdat dit specifieke karakter gedefinieerd was voor het verwijderen van gegevens op ponsbanden. De meeste ponsbanden uit die tijd gebruikten 7 gaten om de gegevens te coderen. De waarde 127 representeert een binair patroon waar alle zeven bits hoog zijn, dus wanneer het DEL karakter werd gebruikt op een bestaande ponsband werden alle gaten uitgeponst met als gevolg het wissen van het gegeven van de ponsband.
Every instructor assumes that you have nothing else to do
except study for that instructor's course.
FOURTH LAW OF APPLIED TERROR
|