Wat is ASCII en hoe werkt tekencodering?

Auteur: Gepubliceerd

Kort samengevat: ASCII is een standaard die aan 128 tekens de getallen 0 tot en met 127 toekent, zodat tekst als gegevens kan worden opgeslagen en verzonden. De standaard omvat onder meer de letters van het Engelse alfabet, cijfers, leestekens en besturingscodes, maar geen Poolse letters zoals ‘ą’ of ‘ł’. Tegenwoordig wordt tekst meestal opgeslagen in UTF-8, dat voor deze eerste 128 tekens compatibel is met ASCII.

Hoe werkt ASCII en wat betekent de naam?

ASCII staat voor American Standard Code for Information Interchange, oftewel Amerikaanse standaardcode voor informatie-uitwisseling. Het is een tekencodering: een vaste regel die tekens aan numerieke waarden koppelt. Een computer slaat getallen op als bits. Een programma dat tekst leest, interpreteert die bits volgens de gekozen codering.

ASCII is een 7-bits codering. Met zeven bits kunnen 128 verschillende waarden worden weergegeven, van 0 tot en met 127. In bestanden neemt elk ASCII-teken doorgaans één byte in, dus acht bits, waarbij de meest significante bit nul is.

De hoofdletter A heeft bijvoorbeeld de decimale waarde 65, die hexadecimaal wordt geschreven als 41 en binair in één byte als 01000001. Dit zijn drie weergaven van dezelfde waarde, geen drie verschillende tekencodes. De notatie 0x41, die je in documentatie en bij het programmeren tegenkomt, geeft aan dat het om een hexadecimale waarde gaat.

Welke tekens bevat de ASCII-tabel?

ASCII bevat 95 afdrukbare tekens, inclusief de spatie. De overige 33 posities zijn besturingscodes die geen gewone zichtbare symbolen weergeven. Ze dienen onder meer om een tab of een regeleinde aan te geven.

Teken of functieDecimale codeHexadecimale code
Tab (TAB)909
Naar een nieuwe regel (LF)100A
Terug naar het begin van de regel (CR)130D
Spatie3220
Cijfer 04830
Hoofdletter A6541
Kleine letter a9761
Verwijderen (DEL)1277F

Een cijfer als teken is niet hetzelfde als een getal. De tekst 123 bestaat uit drie tekens met de ASCII-codes 49, 50 en 51. Een programma moet deze tekst als een getal interpreteren om ermee te kunnen rekenen.

Hoofdletters en kleine letters hebben afzonderlijke codes. Daarom zijn A en a verschillende tekens. Ook een spatie is niet ‘het ontbreken van gegevens’: ze heeft een eigen code en neemt ruimte in het bestand in.

De codes CR en LF verklaren een deel van de verschillen tussen tekstbestanden. In Unix-systemen wordt een regeleinde doorgaans aangegeven met LF, en in Windows met de combinatie CRLF. Documenten kunnen er in een editor dus identiek uitzien, terwijl ze aan het einde van de regels verschillende bytevolgorden bevatten.

ASCII, Unicode en UTF-8: wat is het verschil?

ASCII bevat geen Poolse letters met diakritische tekens, Grieks alfabet, cyrillisch schrift of emoji. Voor tekst in meerdere talen is er Unicode: een standaard die aan tekens en andere tekstelementen nummers toekent, de zogeheten codepunten. UTF-8 is een manier om die codepunten als reeksen bytes op te slaan.

Unicode en UTF-8 zijn geen synoniemen. Unicode bepaalt onder meer welk nummer een teken heeft, terwijl UTF-8 bepaalt hoe dat nummer in gegevens wordt vastgelegd. ASCII combineert een beperkte tekenset met een eenvoudige numerieke codering.

De eerste 128 codepunten van Unicode komen overeen met ASCII. In UTF-8 wordt elk van deze tekens met precies dezelfde enkele byte opgeslagen als in ASCII. Een bestand dat uitsluitend geldige ASCII-tekst bevat, is daarom ook een geldig UTF-8-bestand.

Het verschil wordt duidelijk bij het woord kat: dat neemt zowel in ASCII als in UTF-8 drie bytes in. Het Poolse woord żółw (‘schildpad’) kan daarentegen niet met alleen ASCII worden weergegeven. In UTF-8 neemt het zeven bytes in: twee voor elk van de letters ż, ó en ł, en één voor w.

Waarom ‘uitgebreide ASCII’ misleidend kan zijn

De term ‘uitgebreide ASCII’ verwijst niet naar één universele codering. Hij wordt soms gebruikt voor verschillende 8-bits coderingen die het ASCII-bereik behouden en de extra waarden van 128 tot en met 255 gebruiken. Daaronder vallen onder meer Windows-1250 en ISO-8859-2, die voor Midden-Europese teksten worden gebruikt.

Dezelfde extra byte kan afhankelijk van de codering een ander teken voorstellen. Als een programma een bestand volgens de verkeerde codering leest, kunnen er in plaats van Poolse letters onjuiste symbolen verschijnen. Die worden in het Pools informeel ‘krzaki’ genoemd, letterlijk ‘struiken’: een wirwar van onleesbare tekens. Alleen de aanduiding ‘ASCII-bestand’ is dus onvoldoende om een document te beschrijven dat tekens buiten de basistekenset bevat.

Wanneer is ASCII in de praktijk van belang?

ASCII komt nog steeds voor in protocoldocumentatie, bestandsformaten en beperkingen voor formuliervelden. De melding ‘alleen ASCII-tekens toegestaan’ sluit onder meer Poolse letters, typografische aanhalingstekens en lange gedachtestreepjes uit. Dat betekent echter niet automatisch dat het veld alle ASCII-tekens accepteert: de gebruiksregels of invoercontrole kunnen alleen letters en cijfers toestaan.

Als een geïmporteerd bestand onjuiste tekens weergeeft, volg dan deze korte procedure:

  1. Bewaar een kopie van het origineel voordat je wijzigingen opslaat.
  2. Controleer welke codering de bron van het bestand opgeeft, bijvoorbeeld in de exportinstellingen.
  3. Open het bestand in een editor met die codering en controleer de Poolse letters.
  4. Sla pas nadat het bestand correct is ingelezen een kopie op in UTF-8, als het doelsysteem die codering ondersteunt.

Kies voor een nieuw document met Poolse tekst UTF-8, tenzij de ontvanger een ander formaat vereist. Als ‘ASCII’ als eis wordt gesteld, vraag dan ook precies welke tekens zijn toegestaan. Zo voorkom je dat gegevens ondanks een correcte codering worden geweigerd.

Zie ook: Wat is AGI?

Lees ook

Lees hoe PHP-FPM PHP-verzoeken verwerkt, verschilt van een webserver en hoe je processen afstemt op verkeer en hostingcapaciteit.
Ontdek hoe BIND als open DNS-serversoftware domeinen beheert, welke rollen het vervult en wanneer zelf beheren zinvol is.
Lees wat het Poolse REGON-register en -nummer betekenen, hoe ze verschillen van NIP en KRS en hoe je bedrijfsgegevens controleert.