Hva en tegnkoding er
En koding er en avtale: «tallet 65 betyr bokstaven A». Når du skriver en tekst, lagrer programmet disse tallene. Når en annen person åpner den, oversetter programmet deres tallene tilbake til bokstaver med den samme avtalen. Hvis de to ikke bruker samme tabell, blir teksten feil.
Du må skille mellom to ideer. Den ene er tegnsettet, listen over hvilke tall som svarer til hvilke symboler. Den andre er hvordan disse tallene lagres i byte. I ASCII faller de to sammen på en triviell måte. I Unicode gjør de ikke det, og der kommer UTF-8 inn.
ASCII: 128 tegn på 7 biter
ASCII (forkortelse for American Standard Code for Information Interchange) ble standardisert på 1960-tallet. Det bruker 7 biter, altså 2 opphøyd i 7 = 128 koder, fra 0 til 127. Av dem er 33 kontrolltegn (fra 0 til 31 og 127) og 95 er skrivbare (fra 32 til 126, mellomrom medregnet).
Det inneholder ikke æ, ø, å, bokstaver med aksent eller eurotegnet: det ble laget for engelsk. Det forklarer hvorfor det senere ble behov for andre tabeller.
| Kontrolltegn | Desimal | Heksadesimal | Binær (7 biter) | Hva det brukes til |
|---|---|---|---|---|
| Null (NUL) | 0 | 00 | 0000000 | Markerer slutten på en streng i flere språk |
| Horisontal tabulator (TAB) | 9 | 09 | 0001001 | Hopper til neste tabulatorstopp |
| Linjeskift (LF) | 10 | 0A | 0001010 | Går ned til neste linje |
| Vognretur (CR) | 13 | 0D | 0001101 | Går tilbake til begynnelsen av linjen |
| Escape (ESC) | 27 | 1B | 0011011 | Starter kontrollsekvenser |
| Mellomrom | 32 | 20 | 0100000 | Første skrivbare tegn |
| Slett (DEL) | 127 | 7F | 1111111 | Sletter tegnet |
Sammenhenger det lønner seg å huske
Tabellen er ikke ordnet tilfeldig. Med noen få regelmessigheter kan du lese koder utenat.
- Sifrene fra «0» til «9» ligger fra 48 til 57 (30 til 39 i heksadesimal). Verdien til et siffer er koden minus 48: «7» er 55, og 55 − 48 = 7.
- Store bokstaver går fra 65 («A») til 90 («Z») og små fra 97 («a») til 122 («z»).
- Forskjellen mellom en stor bokstav og den lille er alltid 32: «A» = 65 og «a» = 97; «C» = 67 og «c» = 99. I binær endres bare én bit: 01000001 for «A» og 01100001 for «a».
- For å vite hvilken plass en stor bokstav har i alfabetet trekker du fra 64: «C» er 67 og 67 − 64 = 3, den tredje bokstaven.
- Siden alle store bokstaver (65 til 90) har lavere koder enn de små (97 til 122), setter en alfabetisk rekkefølge «etter kode» «Zebra» foran «apple». Mange programmer trenger et eget sammenligningsvalg for å sortere riktig.
Linjeslutt: LF, CR og CRLF
Et linjeskift virker enkelt, men skrives ulikt etter system. Unix, Linux og macOS bruker ett enkelt tegn, LF (10). Windows bruker to etter hverandre, CR og LF (13 og 10), kjent som CRLF. De gamle fjernskriverne trengte to ulike kommandoer: å føre vognen tilbake til begynnelsen og å mate papiret én linje.
Den forskjellen er årsaken til filer som ser ut som én eneste linje i et enkelt redigeringsprogram, eller med et merkelig tegn på slutten av hver linje. Hvis du vil vite hvilken kode hver av dem har, skriver du LF eller CR i søkefeltet i ASCII-tabellen.
«Utvidet ASCII» er ikke en standard
Siden en byte har 8 biter og ASCII bare bruker 7, var det 128 ledige koder igjen (fra 128 til 255), og hver produsent og region fylte dem på sin måte. Det kalles «utvidet ASCII», men det finnes ikke én eneste tabell: det finnes mange, kalt kodesider. To av de mest kjente er Latin-1 (ISO-8859-1), der é er kode 233, og Windows-1252, som ligner, men har forskjeller i kodene 128 til 159 (der ligger for eksempel euro).
Problemet er at kode 233 betyr «é» i den ene tabellen og noe annet i en annen. En tekst skrevet med én tabell og lest med en annen viste rot. Unicode ble til for å få slutt på det rotet.
Unicode og UTF-8
Unicode gir et unikt tall, kalt kodepunkt, til hvert tegn i nesten alle verdens skriftsystemer, pluss symboler og emojier. I dag har det over 150 000 tegn. Det skrives med prefikset U+ og i heksadesimal: «A» er U+0041, «å» er U+00E5, euro er U+20AC og emojien med smilende ansikt er U+1F600. De første 128 kodepunktene er nøyaktig de samme som i ASCII.
UTF-8 er den mest brukte måten å lagre disse tallene i byte på, og bruker mellom 1 og 4 etter tegnet. De 128 ASCII-tegnene tar én enkelt byte, lik den den alltid har vært, så en ASCII-tekst er også en gyldig UTF-8-tekst. Resten tar flere byte.
| Tegn | Kodepunkt | Byte i UTF-8 | Byte (heksadesimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| å | U+00E5 | 2 | C3 A5 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Hvorfor «Ã¥» dukker opp i stedet for «å»
Det er den vanligste feilen, og den har en nøyaktig forklaring. «å» i UTF-8 er to byte: C3 og A5. Hvis et program tror at teksten er i Latin-1, leser det hver byte som ett tegn: C3 er «Ã» og A5 er «¥». Resultat: «Ã¥». Det samme skjer med «ø», som vises som «Ã¸», og med «blåbær», som kommer opp som «blÃ¥bær».
Løsningen er nesten alltid å si til programmet at det skal åpne filen som UTF-8 (i et tekstredigeringsprogram eller i innstillingene for import i et regneark). Når det skjer motsatt vei, tekst i Latin-1 lest som UTF-8, dukker det ofte opp ruter med et spørsmålstegn, fordi disse enkeltbytene ikke danner gyldige UTF-8-sekvenser.
Slik bruker du ASCII-tabellen og omregneren
Verktøyet «ASCII-tabell» viser de 128 tegnene med koden i desimal, heksadesimal, oktal og binær, og navnet på kontrolltegnene.
- Skriv et tegn, en kode eller navnet på et kontrolltegn (for eksempel A, 65, 41 eller LF) i søkefeltet for å finne raden.
- Bruk filterknappene (Kontroll, Sifre, Store bokstaver, Små bokstaver, Tegn) for å se bare én gruppe.
- For å regne om skriver du en tekst i «Tekst» og velger formatet (desimal, heksadesimal, oktal eller binær): under vises kodene. «Hola» gir 72 111 108 97 i desimal og 48 6F 6C 61 i heksadesimal.
- Du kan også gjøre det motsatt: lim inn koder adskilt med mellomrom eller komma i «Koder», så bygges teksten. I heksadesimal godtas prefikser som 0x41.
Hvis teksten har tegn som ikke er ASCII, som å, sier verktøyet fra og viser Unicode-koden deres. For å se de virkelige bytene i UTF-8 bruker du «Tekst til binær»: å gir 11000011 10100101, to byte på 8 biter. Begrensningene: tabellen viser bare standard ASCII, ikke utvidet, og alt beregnes i nettleseren din uten at teksten sendes til noen server.
Vanlige spørsmål
Hvor mange tegn har ASCII?
128, med koder fra 0 til 127 og 7 biter hver. Av dem er 33 kontrolltegn og 95 er skrivbare, mellomrommet medregnet.
Hva er ASCII-koden til bokstaven A og a?
«A» er 65 (41 i heksadesimal, 01000001 i binær) og «a» er 97 (61 i heksadesimal, 01100001 i binær). De skiller seg alltid med 32.
Hva er forskjellen på ASCII og Unicode?
ASCII har 128 tegn laget for engelsk. Unicode har over 150 000, fra nesten alle språk og emojier, og de første 128 er de samme som i ASCII.
Hva er UTF-8?
Det er den mest brukte måten å lagre Unicode-tekst i byte på. Det bruker fra 1 til 4 byte per tegn: ASCII-tegn tar én, en å tar to og en emoji fire.
Hvorfor viser teksten min «Ã¥» eller «Ã©»?
Fordi en tekst som er lagret i UTF-8, blir lest som Latin-1. Åpne filen og angi UTF-8-koding, så er det løst.