ASCII och Unicode: vad det är och vad det används till

En dator förstår bara tal, så varje bokstav du ser på skärmen är en kod. ASCII var den första kodtabellen som blev standard och Unicode är den vi använder i dag för att skriva på vilket språk som helst. Här ser du hur de fungerar, vilka koder som är bra att kunna, varför konstiga tecken ibland dyker upp i stället för å, ä och ö och hur du slår upp allt i tabellen.

Uppdaterad:

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.

De koder du oftast kommer att stöta på. Mellanslaget (32) räknas som utskrivbart fast det inte syns.
StyrteckenDecimaltHexadecimaltBinärt (7 bitar)Vad det används till
Null (NUL)0000000000Markerar slutet på en sträng i flera språk
Horisontell tabb (TAB)9090001001Hoppar till nästa tabbstopp
Radmatning (LF)100A0001010Går ned till nästa rad
Vagnretur (CR)130D0001101Går tillbaka till början av raden
Escape (ESC)271B0011011Inleder styrsekvenser
Mellanslag32200100000Första utskrivbara tecknet
Radera (DEL)1277F1111111Raderar 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.

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.

Ju längre från ASCII, desto fler byte upptar tecknet.
TeckenKodpunktByte i UTF-8Byte (hexadecimalt)
AU+0041141
éU+00E92C3 A9
åU+00E52C3 A5
€U+20AC3E2 82 AC
😀U+1F6004F0 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.

  1. 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.
  2. Använd filterknapparna (Styrtecken, Siffror, Versaler, Gemener, Skiljetecken) för att bara se en grupp.
  3. 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.
  4. 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.