Använd accesskey 'n' för att hoppa till de interna navigationslänkarna i dokumentet. Hoppa till början av innehållet.

Detta dokument är en översättning av ett engelskt orginal. Om det finns tveksamheter eller fel i detta dokument, så är senaste version av det engelska orginalet den auktoritativa versionen. Copyright tillhör W3C, enligt nedan.

Översättare: Olle Olsson, SICS

s_gotoW3cHome Internationalization
 

Teckenkodning för nybörjare

Avsedd läsarkrets: innehållsförfattare, användare, och alla som är osäkra på vad en teckenkodning är, och vill ha en kort sammanfattning om hur det kan påverka dem.

Frågor

Vad är en teckenkodning, och varför ska jag bry mig om sådant?

Svar

Först, varför ska jag bry mig om detta?

Om du använder något mer än de mest enkla tecken som förekommer i västerländska språk, så kanske folk inte kan läsa din text, om du inte talar om vilken teckenkodning du använt.

Du kan till exempel ha avsett att din text ska se ut som detta:

mojibake1.gif

men den kan faktiskt visas som detta:

mojibake2.gif

Inte nog med att otillräcklig information om kodning kan sabotera läsbarheten av uppvisad text. Det kan också betyda att din data inte kan hittas genom sökning på webben, eller bearbetas på meningsfullt sätt.

Så vad är en teckenkodning?

Ord och meningar i text byggs upp med tecken. Exempel på tecken är á i det latinska alfabetet, och det kinesiska ideogrammet och tecknet i devanagari.

Du kanske inte kan se vissa av tecknen på denna sida, eftersom din webbläsare inte har de nödvändiga teckensnitten. Om du klickar på det ställe där du förväntade dig se ett tecken, så får du en länk till en bild av tecknet. Denna sida är kodad i kodningen UTF-8.

Tecken grupperas i en teckenuppsättning (även kallad en repertoar). Detta kallas en kodad teckenuppsättning då varje tecken tilldelas ett visst nummer, kallad tecknets kodpunkt. Dessa kodpunkter representeras i datorn av en eller flera byte.

Detta innebär helt enkelt att alla tecken lagras i datorn som en kod, ungefär som ett chiffer används av spioner. En teckenkodning är en nyckel för att låsa upp (dvs "knäcka") koden. En sådan nyckel är en uppsättning avbildningar mellan de byte som representerar tal inne i datorn, och tecken i den kodade teckenuppsättningen. Utan nyckel kommer data inte att se meningsfullt ut.

Den lite vilseledande termen charset används ofta för vad som i verkligheten är teckenkodningar. Du bör vara medveten om denna användning, men använd hellre termen teckenkodningar för detta.

Tyvärr finns det många olika teckenuppsättningar och teckenkodningar, dvs många olika sätt att relatera bytes, kodpunkter och tecken till varandra. Följande ruta ger mer information för de som vill veta mera.

Detta kan exemplifieras av följande. I den kodade teckenuppsättningen som benämnes ISO 8859-1 (även kallad Latin1) är 233 decimalformen av värdet för kodpunkten för tecknet é. I ISO 8859-5 representerar samma kodpunkt det kyrilliska tecknet щ. Dessa teckenuppsättningar innehåller färre än 256 tecken, och de avbildar kodpunkt direkt till byte-värde. Och alltså representeras en kodpunkt med värde 233 av en enda byte med värdet 233. Lägg dock märke till att denna byte representerar antingen é eller щ, beroende på sammanhanget.

Det finns andra sätt att hantera tecken i andra skriftsystem. Med teckenuppsättningen Unicode kan du till exempel representera båda dessa tecken i samma teckenuppsättning. Unicode innehåller faktiskt, i ett enda teckenuppsättning, de flesta tecken som du kommer att behöva använda. Värdet 233 står här fortfarande för é, men det kyrilliska tecknet щ har nu en kodpunkt med värdet 1097. Detta värde är för stort för att representeras i en enda byte*. Om du använder den teckenkodning för text i Unicode som kallas UTF-8, så kommer щ att representeras av två byte, men värdet för kodpunkten är inte det man får av att bara lägga dessa dessa bytes efter varandra – en mer komplex avkodning behövs. Andra Unicode-tecken representeras av en, tre eller fyra byte i UTF-8-kodningen.

UTF-8 är det mest använda sättet att representera Unicode-text i webbsidor. Men UTF-8 är bara ett av flera möjliga sätt att koda Unicode-tecken. Med andra ord, en viss kodpunkt i Unicodes teckenuppsättning kan faktiskt avbildas på olika sekvenser av bytes, beroende på vilken kodning som användes för dokumentet. Kodpunkter i Unicode kan representeras med bytes i någon av de kodningar som kallas UTF-8, UTF-16 eller UTF-32. Devanagari-tecknet , med kodpunkt 2325 (som är 915 i hexadecimal notation), representeras av två bytes i UTF-16-kodningen (09 15), tre bytes i UTF-8-kodningen (E0 A4 95), och fyra bytes i UTF-32-kodningen (00 00 09 15).

* Nuförtiden brukar en byte vara 8 bitar. Det finns bara 28 (dvs. 256) olika sätt att kombinera 8 bitar.

Tänk även på att talen för kodpunkter vanligen uttrycks i hexadecimal form - dvs med basen 16. Så har t.ex. talet 233 den hexadecimala formen E9. Värdet för kodpunkter i Unicode skrivs vanligen i stil med U+00E9.

Det kan finnas andra komplikationer utöver de som beskrivits i rutan ovan (såsom byteordning och specialsekvenser, "escape sequences"), men det som beskrivits ovan visar varför det är viktigt att tillämpningen som du arbetar med vet vilken teckenkodning som är lämplig för din data, och vet hur man använder den kodningen.

I de flesta fall behöver du dock inte känna till alla detaljer. Det räcker med att du är säker på att du följer råden i avsnittet Hur påverkar det mig? nedan.

Vilken roll har typsnitt i detta?

Ett typsnitt är en samling definitioner av glyfer, dvs definitioner av vilka former som ska användas för att visa tecken.

När din tillämpning har tagit reda på vilka tecken den ska hantera, så letar den i typsnittet efter glyfer, för att kunna visa eller skriva ut dessa tecken. (Om informationen om kodningen är felaktig, så kommer den naturligtvis att använda glyfer för fel tecken.)

Ett typsnitt gäller vanligtvis enbart för en viss teckenuppsättning, eller, då det handlar om stora teckenuppsättningar som Unicode, enbart en delmängd av alla tecknen i denna teckenuppsättning. Om ditt typsnitt inte har en glyf för ett visst tecken, så kan vissa tillämpningar hämta det saknade tecknet från ett annat typsnitt på ditt system (vilket betyder att glyfen utseendemässigt skiljer sig från den omgivande texten, ungefär som en text av hopklistrade tecken ur en tidning). Annars får du istället typiskt se en liten fyrkant, ett frågetecken, eller något annat tecken. Till exempel:

mojibake3.gif

Hur kommer detta att påverka mig?

Om du är en författare eller utvecklare av innehåll så behöver du välja den teckenkodning som är bäst för ditt innehåll eller dina data. Unicode-kodningar är ofta ett bra val, eftersom du kan använda en enda kodning för att hantera praktiskt taget alla tecken du kommer att behöva använda. Detta gör livet lättare. Om du använder Unicode överallt, så behöver ditt system inte hålla reda på och konvertera mellan olika teckenkodningar.

Författare av innehåll måste ta reda på i vilken kodning som deras redigeringsverktyg eller skript sparar text, och hur du sparar text i den kodning du vill ha. Lägg dock märke till att det inte räcker med att ange en annan kodning; du måste även spara texten i den kodningen.

Innehållsförfattare måste ta reda på hur man deklarerar teckenkodningen för det dokumentformat du arbetar med. Du kan också behöva kontrollera att din webbserver levererar dokument med rätt HTTP-deklarationer.

Utvecklare måste säkerställa att de olika delarna av systemet kan kommunicera med varandra, förstå vilka teckenkodningar som används, och stödja alla använda kodningar och tecken.

Länkarna nedan leder till mer information om dessa teman.

Nyttig information

Artikeln Teckenkodningar: grundläggande begrepp är lämpligt att läsa nu, eftersom det ger en smidig introduktion till angränsande teman, som Unicode, UTF-8, teckenuppsättningar, kodade teckenuppsättningar, kodningar, teckenuppsättning för dokument, specialsekvenser av tecken, och HTTP-huvuden.

Tala om för oss vad du tycker (på engelska).

Prenumerera på en RSS-kanal.

Nya resurser

Nyheter på hemsidan

Twitter (Nyheter på hemsidan)

‎@webi18n

Mer att läsa

Av: Richard Ishida, W3C. Översättare: Olle Olsson, SICS.

Valid XHTML 1.0!
Valid CSS!
Kodad i UTF-8!

Översatt från engelskt innehåll skapat/ändrat 2010-09-08. Översättningen senast ändrad 2012-02-10 15:30 GMT

Information om ändringar i orginaldokumentet kan fås genom att söka efter qa-what-is-encoding i i18n-bloggen.