Vad är en teckenkodning
En kodning är en överenskommelse: ”talet 65 betyder bokstaven A”. När du skriver en text sparar programmet de talen; när någon annan öppnar den översätter hens program dem tillbaka till bokstäver med hjälp av samma överenskommelse. Om de två inte använder samma tabell blir texten fel.
Man måste skilja på två idéer. Den ena är teckenuppsättningen, listan över vilka tal som motsvarar vilka symboler. Den andra är hur de talen sparas i byte. I ASCII sammanfaller de två på ett trivialt sätt; i Unicode gör de inte det, och där kommer UTF-8 in.
ASCII: 128 tecken på 7 bitar
ASCII (förkortning av American Standard Code for Information Interchange) standardiserades på 1960-talet. Det använder 7 bitar, alltså 2 upphöjt till 7 = 128 koder, från 0 till 127. Av dem är 33 styrtecken (0 till 31 och 127) och 95 är utskrivbara (32 till 126, inklusive mellanslaget).
Det innehåller inte å, ä, ö eller eurotecknet: det utformades för engelska. Det förklarar varför det senare behövdes andra tabeller.
| Styrtecken | Decimalt | Hexadecimalt | Binärt (7 bitar) | Vad det används till |
|---|---|---|---|---|
| Null (NUL) | 0 | 00 | 0000000 | Markerar slutet på en sträng i flera språk |
| Horisontell tabb (TAB) | 9 | 09 | 0001001 | Hoppar till nästa tabbstopp |
| Radmatning (LF) | 10 | 0A | 0001010 | Går ned till nästa rad |
| Vagnretur (CR) | 13 | 0D | 0001101 | Går tillbaka till början av raden |
| Escape (ESC) | 27 | 1B | 0011011 | Inleder styrsekvenser |
| Mellanslag | 32 | 20 | 0100000 | Första utskrivbara tecknet |
| Radera (DEL) | 127 | 7F | 1111111 | Raderar tecknet |
Samband som är bra att komma ihåg
Tabellen är inte ordnad på måfå. Med några få regelbundenheter kan du läsa koder utantill.
- Siffrorna ”0” till ”9” upptar 48 till 57 (30 till 39 hexadecimalt). Värdet av en siffra är dess kod minus 48: ”7” är 55, och 55 − 48 = 7.
- Versalerna går från 65 (”A”) till 90 (”Z”) och gemenerna från 97 (”a”) till 122 (”z”).
- Skillnaden mellan en versal och dess gemen är alltid 32: ”A” = 65 och ”a” = 97; ”C” = 67 och ”c” = 99. Binärt ändras bara en bit: 01000001 för ”A” och 01100001 för ”a”.
- För att veta vilken plats i alfabetet en versal har drar du ifrån 64: ”C” är 67 och 67 − 64 = 3, den tredje bokstaven.
- Eftersom alla versaler (65 till 90) har lägre koder än gemenerna (97 till 122) placerar en alfabetisk sortering ”efter kod” ”Zebra” före ”apple”. Många program behöver ett särskilt jämförelsealternativ för att sortera rätt.
Radslut: LF, CR och CRLF
En radbrytning verkar enkel, men den skrivs olika beroende på system. Unix, Linux och macOS använder ett enda tecken, LF (10). Windows använder två i följd, CR och LF (13 och 10), kända som CRLF. De gamla fjärrskrivarna behövde två olika kommandon: föra tillbaka vagnen till början och mata fram papperet en rad.
Den skillnaden är orsaken till att filer ser ut som en enda rad i en enkel textredigerare, eller med ett konstigt tecken i slutet av varje rad. Om du vill veta vilken kod var och en har skriver du LF eller CR i sökfältet i ASCII-tabellen.
”Utökad ASCII” är ingen standard
Eftersom en byte har 8 bitar och ASCII bara använder 7 fanns det 128 lediga koder (128 till 255), och varje tillverkare och region fyllde dem på sitt sätt. Det kallas ”utökad ASCII”, men det finns ingen enda tabell: det finns många, kallade teckentabeller. Två av de mest kända är Latin-1 (ISO-8859-1), där é är kod 233, och Windows-1252, som liknar den men skiljer sig på koderna 128 till 159 (där finns till exempel euron).
Problemet är att kod 233 betyder ”é” i en tabell och något annat i en annan. En text skriven med en tabell och läst med en annan visade skräp. Unicode kom till för att få slut på det oredan.
Unicode och UTF-8
Unicode tilldelar ett unikt tal, kallat kodpunkt, till varje tecken i nästan alla skriftsystem i världen, plus symboler och emojis. I dag har det över 150 000 tecken. Det skrivs med prefixet U+ och hexadecimalt: ”A” är U+0041, ”å” är U+00E5, euron är U+20AC och emojin med leende ansikte är U+1F600. De första 128 kodpunkterna är exakt de i ASCII.
UTF-8 är det vanligaste sättet att spara de talen i byte, och använder mellan 1 och 4 beroende på tecknet. De 128 ASCII-tecknen upptar en enda byte, identisk med den gamla, så en ASCII-text är också en giltig UTF-8-text. Resten upptar fler byte.
| Tecken | Kodpunkt | Byte i UTF-8 | Byte (hexadecimalt) |
|---|---|---|---|
| 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 |
Varför ”Ã¥” dyker upp i stället för ”å”
Det är det vanligaste felet och det har en exakt förklaring. Å i UTF-8 är två byte: C3 och A5. Om ett program tror att texten är i Latin-1 läser det varje byte som ett tecken: C3 är ”Ô och A5 är ”¥”. Resultat: ”Ã¥”. Samma sak händer med ”ä”, som syns som ”ä”, och med ”smörgås”, som visas som ”smörgÃ¥s”.
Lösningen är nästan alltid att tala om för programmet att det ska öppna filen som UTF-8 (i en textredigerare eller i inställningarna för import i ett kalkylprogram). När det blir tvärtom, text i Latin-1 läst som UTF-8, dyker det ofta upp romber med ett frågetecken, eftersom de enstaka byten inte bildar giltiga UTF-8-sekvenser.
Så använder du ASCII-tabellen och omvandlaren
Verktyget ”ASCII-tabell” visar de 128 tecknen med sin kod decimalt, hexadecimalt, oktalt och binärt, och namnet på styrtecknen.
- Skriv ett tecken, en kod eller namnet på ett styrtecken i sökfältet (till exempel A, 65, 41 eller LF) för att hitta dess rad.
- Använd filterknapparna (Styrtecken, Siffror, Versaler, Gemener, Skiljetecken) för att bara se en grupp.
- För att omvandla skriver du en text i ”Text” och väljer format (decimal, hexadecimal, oktal eller binär): längre ned visas koderna. ”Hola” ger 72 111 108 97 decimalt och 48 6F 6C 61 hexadecimalt.
- Du kan också göra tvärtom: klistra in koder åtskilda av mellanslag eller kommatecken i ”Koder” så byggs texten upp. I hexadecimalt godtas prefix som 0x41.
Om texten har tecken som inte är ASCII, som å, varnar verktyget och visar deras Unicode-kod. För att se de verkliga byten i UTF-8 använder du ”Text till binärt”: å ger 11000011 10100101, två byte på 8 bitar. Begränsningarna: tabellen visar bara standard-ASCII, inte den utökade, och allt beräknas i din webbläsare utan att texten skickas till någon server.
Vanliga frågor
Hur många tecken har ASCII?
128, med koder från 0 till 127 och 7 bitar vardera. Av dem är 33 styrtecken och 95 utskrivbara, mellanslaget inräknat.
Vilken är ASCII-koden för bokstaven A och för a?
”A” är 65 (41 hexadecimalt, 01000001 binärt) och ”a” är 97 (61 hexadecimalt, 01100001 binärt). De skiljer sig alltid med 32.
Vad är skillnaden mellan ASCII och Unicode?
ASCII har 128 tecken tänkta för engelska. Unicode har över 150 000, från nästan alla språk och emojis, och dess första 128 är desamma som i ASCII.
Vad är UTF-8?
Det är det vanligaste sättet att spara Unicode-text i byte. Det använder 1 till 4 byte per tecken: ASCII-tecknen upptar en, ett å upptar två och en emoji fyra.
Varför visar min text ”Ã¥” eller ”é”?
Därför att en text som sparats i UTF-8 läses som Latin-1. Öppna filen med kodningen UTF-8 angiven så löser det sig.