Hur fungerar det här med teckenkodning egentligen?

Det här inlägget publicerades ursprungligen på bloggen Entreprenörd 29 januari 2010.

Något som jag själv och väldigt många andra har svårt att förstå fullt ut är hur teckenkodning fungerar. Du vet det här med ASCII, UTF-8, ISO 8859-1 och så vidare… Vad är det egentligen? Och när man ser en text med ö istället för våra svenska tecken – vad är det som har hänt?

Våra kära datorer känner ju bara till ettor och nollor, inte bokstäver (eller tecken, som jag ska kalla dem i den här artikeln). Alltså måste vi ha en konvention, eller teckenkodning, för hur ettor och nollor ska kunna representera tecken. Tyvärr har vi flera!

Om en text är sparad enligt en teckenkodning och du försöker tolka den enligt en annan, finns det en risk att du inte kan läsa allt som det var tänkt. Ibland ser texter ut så här:

Gud hjälpe qvickt Zorns mö få aw byxor.

Denna text är sparad med UTF-8 och tolkad som ISO 8859-1. Eftersom tecknen a-z, mellanslag och punkt lagras precis likadant i de båda standarderna kan du läsa dem, men våra svenska tecken å-ö lagras på olika sätt.

Vad är då skillnaden mellan ISO 8859-1 (även kallad Latin-1) och UTF-8?

Latin-1 är en utökning av den gamla ASCII-standarden och består av 255 tecken. Den är tänkt att användas för västeuropeiska språk och saknar tecken från exempelvis de grekiska, arabiska och kyrilliska alfabeten.

UTF-8 består av samtliga tecken i Unicode-standarden, som i dagsläget är över 100 000 tecken! Unicode är tänkt att omfatta alla tecken och skriftspråk som någonsin har funnits. Du ska alltså kunna skriva på vilket språk som helst och aldrig behöva byta teckenkodning!

Tecken som lagras med Latin-1 tar alltid upp exakt en byte. (En byte är ju 8 bitar, som ger 256 kombinationer – alltså 255 tecken och null.)

Men tecken som lagras med UTF-8 varierar mellan 1-4 bytes! Tecken som återfinns i ASCII-standarden lagras precis som där, men för andra tecken används fler bytes. (Exempelvis lagras å-ö med 2 bytes, vilket är orsaken till att de visas som två tecken med Latin-1 ovan.) Det ger en praktisk bakåtkompatibilitet i många fall, men förvirring i andra.

Ju mer vi gräver ned oss i detta, desto knepigare blir det. Jag tror inte att jag ska gå djupare här, så om du vill lära dig mer, börja med Joel Spolskys artikel The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).

Mitt tips är att du använder UTF-8. Det är den absolut vanligaste teckenkodningen på webben enligt en undersökning av Google. (De näst vanligaste teckenkodningarna är ASCII och Latin-1/Windows-1252.)

Läs Unicode for the working PHP programmer om du vill lära dig mer om hur du använder UTF-8 med PHP via Multibyte String Functions.

En reaktion på ”Hur fungerar det här med teckenkodning egentligen?”

  1. Känner helt igen mig, det är bland de värsta som finns, speciellt när man jobbar på till exempel API:er eller andra källor, då kan ibland vara på UTF-8 på en källa, medan en annan är ISO-8859-1 eller något ännu värre.

    Bra post och bra att du tar upp detta och rekommenderar UTF-8 rakt igenom!

Kommentarer inaktiverade.