UTF-8 (Unicode Transformation Format – 8-bit) är den dominerande teckenkodningen för World Wide Web, använd i över 98% av alla webbsidor. Den representerar effektivt varje tecken i Unicode-standarden – som täcker praktiskt taget alla världens skriftsystem – samtidigt som den bibehåller bakåtkompatibilitet med ASCII.
Hur UTF-8-kodning fungerar
UTF-8 är en variabel bredd kodning som använder en till fyra 8-bitars bytes per tecken:
- 1 byte (0xxxxxxx): Täcker ASCII-intervallet (U+0000 till U+007F). Engelsk text, siffror, och grundläggande symboler förblir identiska med ASCII.
- 2 byte (110xxxxx 10xxxxxx): Kodar tecken från U+0080 till U+07FF, inklusive latinska utökade, grekiska, kyrilliska, hebreiska, och arabiska skrifter.
- 3 byte (1110xxxx 10xxxxxx 10xxxxxx): Täcker Basic Multilingual Plane (BMP) från U+0800 till U+FFFF, inklusive de flesta kinesiska, japanska, koreanska (CJK) tecken och vanliga symboler.
- 4 byte (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx): Representerar kompletterande plan (U+10000 till U+10FFFF), såsom emojis, historiska skrifter, och sällsynta tecken.
Vesentliga egenskaper som driver adoption
- ASCII bakåtkompatibilitet: Varje giltig ASCII-fil är en giltig UTF-8-fil.
- Självsynkroniserande: De inledande bitarna i varje byte anger sekvenslängden, vilket tillåter en avkodare att återställa justering efter korruption eller mid-stream start.
- Inget obligatoriskt Byte Order Mark (BOM): Till skillnad från UTF-16/32 har UTF-8 inga endianness-problem; ett BOM är valfritt och utelämnas ofta.
- Ubiquitet: Standardkodning för HTML5, XML, JSON, e-post (MIME), Linux/Unix-system, moderna databaser, och programmeringsspråk.
Jämförelse med andra Unicode-kodningar
- UTF-16: Använder 2 eller 4 byte per kod-enhet. Inhemsk intern strängformat i Windows, Java, JavaScript, och .NET. Kräver BOM för endianness-detektion.
- UTF-32: Fast 4 byte per kodpunkt. Förenklar teckenindexering men är utrymmesineffektiv för de flesta texter.
Bästa praxis
Deklarera alltid teckenuppsättningen explicit i HTTP-huvuden och dokumentmetadata:
Content-Type: text/html; charset=utf-8
Detta förhindrar fel tolkning (mojibake) och säkerställer konsekvent rendering över webbläsare och plattformar.