Hvad en tegnkodning er
En kodning er en aftale: «tallet 65 betyder bogstavet A». Når du skriver en tekst, gemmer programmet disse tal; når en anden åbner den, oversætter hendes eller hans program dem tilbage til bogstaver med den samme aftale. Hvis de to ikke bruger den samme tabel, bliver teksten forkert.
Man skal skelne mellem to ideer. Den ene er tegnsættet, listen over, hvilke tal der svarer til hvilke symboler. Den anden er, hvordan disse tal gemmes i bytes. I ASCII falder de to trivielt sammen; i Unicode gør de ikke, og der kommer UTF-8 ind.
ASCII: 128 tegn på 7 bit
ASCII (forkortelse for American Standard Code for Information Interchange) blev standardiseret i 1960'erne. Det bruger 7 bit, altså 2 i 7. potens = 128 koder, fra 0 til 127. Af dem er 33 kontroltegn (fra 0 til 31 og 127) og 95 kan udskrives (fra 32 til 126, mellemrum medregnet).
Det omfatter ikke bogstaver med accent, ikke æ, ø og å og ikke eurotegnet: det var designet til engelsk. Det forklarer, hvorfor der senere blev brug for andre tabeller.
| Kontroltegn | Decimal | Hexadecimal | Binær (7 bit) | Hvad det bruges til |
|---|---|---|---|---|
| Nul (NUL) | 0 | 00 | 0000000 | Markerer slutningen på en streng i flere sprog |
| Vandret tabulator (TAB) | 9 | 09 | 0001001 | Springer til næste tabulatorstop |
| Linjeskift (LF) | 10 | 0A | 0001010 | Går ned på næste linje |
| Vognretur (CR) | 13 | 0D | 0001101 | Går tilbage til begyndelsen af linjen |
| Escape (ESC) | 27 | 1B | 0011011 | Starter kontrolsekvenser |
| Mellemrum | 32 | 20 | 0100000 | Første tegn, der kan udskrives |
| Slet (DEL) | 127 | 7F | 1111111 | Sletter tegnet |
Sammenhænge, det er godt at huske
Tabellen er ikke ordnet tilfældigt. Med nogle få regelmæssigheder kan du læse koder udenad.
- Cifrene fra «0» til «9» ligger fra 48 til 57 (30 til 39 i hexadecimal). Værdien af et ciffer er dets kode minus 48: «7» er 55, og 55 − 48 = 7.
- Store bogstaver går fra 65 («A») til 90 («Z») og små fra 97 («a») til 122 («z»).
- Forskellen mellem et stort bogstav og dets lille er altid 32: «A» = 65 og «a» = 97; «C» = 67 og «c» = 99. I binær ændrer kun én bit sig: 01000001 for «A» og 01100001 for «a».
- For at finde ud af, hvilken plads i alfabetet et stort bogstav har, trækker du 64 fra: «C» er 67, og 67 − 64 = 3, det tredje bogstav.
- Da alle store bogstaver (65 til 90) har lavere koder end de små (97 til 122), sætter en alfabetisk rækkefølge «efter kode» «Zebra» før «apple». Mange programmer har brug for en særskilt sammenligningsmulighed for at sortere rigtigt.
Linjeskift: LF, CR og CRLF
Et linjeskift ser enkelt ud, men skrives forskelligt efter systemet. Unix, Linux og macOS bruger ét enkelt tegn, LF (10). Windows bruger to efter hinanden, CR og LF (13 og 10), kendt som CRLF. De gamle fjernskrivere havde brug for to forskellige kommandoer: at føre vognen tilbage til begyndelsen og at rykke papiret en linje frem.
Den forskel er årsagen til filer, der ser ud, som om alt står på én linje i en simpel editor, eller med et mærkeligt tegn i slutningen af hver linje. Hvis du vil vide, hvilken kode hver har, så skriv LF eller CR i søgefeltet i ASCII-tabellen.
«Udvidet ASCII» er ikke en standard
Da en byte har 8 bit, og ASCII kun bruger 7, var der 128 ledige koder (fra 128 til 255), og hver producent og region fyldte dem på sin egen måde. Det kaldes «udvidet ASCII», men der findes ikke én enkelt tabel: der er mange, kaldet kodesider. To af de mest kendte er Latin-1 (ISO-8859-1), hvor é er kode 233, og Windows-1252, der ligner, men har forskelle i koderne 128 til 159 (der ligger for eksempel euroen).
Problemet er, at kode 233 betyder «é» i den ene tabel og noget andet i en anden. En tekst skrevet med den ene tabel og læst med den anden viste volapyk. Unicode opstod for at gøre en ende på det rod.
Unicode og UTF-8
Unicode giver et unikt tal, kaldet kodepunkt, til hvert tegn i næsten alle verdens skriftsystemer samt symboler og emojis. I dag har det over 150.000 tegn. Det skrives med præfikset U+ og i hexadecimal: «A» er U+0041, «æ» er U+00E6, euroen er U+20AC, og emojien med et smilende ansigt er U+1F600. De første 128 kodepunkter er præcis ASCII's.
UTF-8 er den mest brugte måde at gemme disse tal i bytes, og den bruger mellem 1 og 4 alt efter tegnet. De 128 fra ASCII fylder en enkelt byte, identisk med den gamle, så en ASCII-tekst er også en gyldig UTF-8-tekst. Resten fylder flere bytes.
| Tegn | Kodepunkt | Bytes i UTF-8 | Bytes (hexadecimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| æ | U+00E6 | 2 | C3 A6 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Hvorfor der står «Ã¦» i stedet for «æ»
Det er den mest almindelige fejl, og den har en præcis forklaring. Æ i UTF-8 er to bytes: C3 og A6. Hvis et program tror, at teksten er i Latin-1, læser det hver byte som ét tegn: C3 er «Ã» og A6 er «¦». Resultat: «Ã¦». Det samme sker med «ø», som ser ud som «Ã¸», med «å», som ser ud som «Ã¥», og med «København», der vises som «København».
Løsningen er næsten altid at fortælle programmet, at filen skal åbnes som UTF-8 (i et tekstprogram eller i indstillingerne for import i et regneark). Når det sker omvendt, tekst i Latin-1 læst som UTF-8, dukker der som regel rudetegn med et spørgsmålstegn op, fordi disse enkeltstående bytes ikke danner gyldige UTF-8-sekvenser.
Sådan bruger du ASCII-tabellen og omregneren
Værktøjet «ASCII-tabel» viser de 128 tegn med deres kode i decimal, hexadecimal, oktal og binær samt navnet på kontroltegnene.
- Skriv et tegn, en kode eller navnet på et kontroltegn i søgefeltet (for eksempel A, 65, 41 eller LF) for at finde dets række.
- Brug filterknapperne (Kontrol, Cifre, Store bogstaver, Små bogstaver, Tegn) for kun at se én gruppe.
- For at omregne skriver du en tekst i «Tekst» og vælger formatet (decimal, hexadecimal, oktal eller binær): nedenfor vises koderne. «Hola» giver 72 111 108 97 i decimal og 48 6F 6C 61 i hexadecimal.
- Du kan også gøre det omvendt: indsæt koder adskilt af mellemrum eller kommaer i «Koder», og teksten bygges. I hexadecimal accepteres præfikser som 0x41.
Hvis teksten har tegn, der ikke er ASCII, som æ, giver værktøjet besked og viser deres Unicode-kode. For at se de egentlige bytes i UTF-8 bruger du «Tekst til binær»: æ giver 11000011 10100110, to bytes på 8 bit. Grænserne: tabellen viser kun standard-ASCII, ikke den udvidede, og alt beregnes i din browser uden at sende teksten til nogen server.
Ofte stillede spørgsmål
Hvor mange tegn har ASCII?
128, med koder fra 0 til 127 og 7 bit hver. Af dem er 33 kontroltegn og 95 kan udskrives, mellemrum medregnet.
Hvad er ASCII-koden for bogstavet A og a?
«A» er 65 (41 i hexadecimal, 01000001 i binær) og «a» er 97 (61 i hexadecimal, 01100001 i binær). De adskiller sig altid med 32.
Hvad er forskellen på ASCII og Unicode?
ASCII har 128 tegn, der er lavet til engelsk. Unicode har over 150.000, fra næsten alle sprog og emojis, og dets første 128 er de samme som ASCII's.
Hvad er UTF-8?
Det er den mest brugte måde at gemme Unicode-tekst i bytes. Det bruger 1 til 4 bytes pr. tegn: ASCII-tegn fylder én, et æ fylder to og en emoji fire.
Hvorfor viser min tekst «Ã¦» eller «Ã©»?
Fordi en tekst gemt i UTF-8 bliver læst som Latin-1. Åbn filen og angiv kodningen UTF-8, så er det løst.