UTF-8

Från Wikipedia

Hoppa till: navigering, sök

UTF-8 (åtta-bitars Unicode transformationsformat) är en teckenkodning (längdvarierande) som används för att representera text kodad i Unicode, som en sekvens av bytes, till exempel i textfiler. Unicode använder upp till 21 bitar, vilket inte får plats i en byte.

UTF-8 är konstruerat så att tecken som tillhör ASCII-tabellen (som täcker A-Z, a-z, 0-9 samt vanligt förekommande interpunktion) kommer att kodas på samma sätt i både ASCII och UTF-8, och inga bytes som inte är ASCII-tecken kan misstolkas som ASCII-tecken. Det gör UTF-8 lämpligt för tillämplingar där man eventuellt tolkar vissa följder av ASCII-tecken speciellt (som nyckelord på något sätt), medan resten av texten bara kopieras vidare oförändrad - till exempel för webbsidor. HTML-koder blir oförändrade mot en en-bytes kodning, men man kan ändå få stöd för alla världens språk. Wikipedias sidor är kodade i UTF-8.

I program som inte uppdaterats för Unicode, eller av någon anledning tolkar byteströmmen som något annat än UTF-8, kan visa fel tecken. Ett program som felaktigt tolkar byte-strömmen som om den vore kodad i Latin-1 (ISO/IEC 8859-1), kan om texten "knäckebröd av råg" är kodad i UTF-8 visa den som "knäckebröd av rÃ¥g".

Eftersom UTF-8 kodar på ett visst sätt (första byten för ett tecken har C0-F7 (hex), övriga bytes 80-BF), kan en modern texteditor eller webläsare se i själva filen att den är gjord i UTF-8 och därmed Unicode, som det bara finns en version av, och alltid tolka filen som UTF-8 om den är det. Detta är en stor fördel mot nästan alla äldre kodningar, då det var svårt eller omöjligt att räkna ut kodningen om det inte direkt framgick. Nyare webläsare gör denna beräkning, innan dess var sådana problem vanliga under en tid när Unicode var nyare, och webläsarna inte stödde det bra. I Windows brukar Unicode-textfiler ha ett specialtecken först (U+FEFF, som inte visas), och med UTF-8 då blir de tre första bytena EF BB BF. Denna markering visar meddetsamma att att det rör sig om UTF-8. I Unix brukar man inte ha någon sådan markering, vilket inte är nödvändigt för att känna igen UTF-8.

UTF-8 är standardiserad av ISO/IEC 10646, Unicode, och även RFC 3629 (UTF-8, a transformation format of ISO/IEC 10646). Nedan ges en sammanfattning.

Innehåll

[redigera] Beskrivning

Om den mest signifikanta biten i den första byten (oktetten) är nolla, är det ett ASCII-tecken (kodat i en enda oktett/byte). Annars ger antalet mest signifikanta bitar som är etta (före första noll-biten) i första byten sekvensens längd, vilket kan vara två till fyra. De kodpunkter (teckennummer) som kan representeras är begränsat till U+0000 - U+10FFFF. Om sekvensen spänner över flera bytes, startar efterföljande oktetter (bytes) alltid med bitmönstret 10. Representationer som använder fler bytes än nödvändigt är felaktiga. Kodsekvenser som skulle representera surrogatkodpunkter (inom U+D800–U+DFFF, avsedda för UTF-16) är även de felaktiga.

Eftersom UTF-32, UTF-16 och UTF-8 sträcker sig över samma kodpunkter, kan konvertering ske mellan dessa tre kodscheman utan förlust.

Jämförelse mellan de olika kodningarna UTF-16 och UTF-8.
Kodintervall hexadecimalt UTF-16 UTF-8 binärt Anmärkning
U+0000 - U+007F: 00000000 0xxxxxxx 0xxxxxxx UTF-8-kodningen är här samma som ASCII; bitsekvensen startar med värdet noll, liksom alla ASCII-koder
U+0080 - U+07FF: 00000xxx xxxxxxxx 110xxxxx 10xxxxxx Bitsekvensen i första oktetten startar med lika många "1" som antalet oktetter (2-4), följt av "0". Följande oktetter startar med bitsekvensen "10"
U+0800 - U+FFFF (utom
U+D800 - U+DFFF):
xxxxxxxx xxxxxxxx 1110xxxx 10xxxxxx 10xxxxxx
U+10000 - U+10FFFF: 110110xx xxxxxxxx 110111xx xxxxxxxx* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx UTF-16 kräver en surrogatkod; ett offset av 0x10000 subtraheras, så att bitsekvensen inte är identisk med UTF-8

Till exempel, tecknet alef (\aleph), som har Unicode-kodpunkten U+05D0, kodas i UTF-8 på följande sätt:

  • Tecknet finns inom intervallet 0x0080-0x07FF, vilket gör att det måste representeras av två bytes: 110x xxxx 10xx xxxx.
  • Hexadecimala 0x05D0 är binärt 101 1101 0000.
  • De elva bitarna stoppas i positionerna markerade med x ovan (man lägger till ledande 0-bitar när så behövs, men inte fler än nödvändigt): 1101 0111 1001 0000.
  • Slutresultatet är två bytes, i hexadecimal form 0xD7 0x90.

De första 128 kodtecknen behöver bara en byte. Med två bytes kan UTF-8 representera 1920 olika kodtecken, med tre oktetter ryms 63488 teckenkoder (kodpunkter upp till 65536 / U+FFFF), 2048 surrogatkoder undantagna), och med fyra bytes kan alla övriga kodpunkter (utom surrogatkodpunkter) representeras.

Exempel på skriftsystem som kräver två bytes per tecken i UTF-8 är (de flesta) latinska tecken, grekiska, kyrilliska, armenska, hebreiska och arabiska. Därmot behöver japanska, kinesiska, koreanska, thailändska med flera språk tre bytes per tecken.

[redigera] Historik

UTF-8 uppfanns av Ken Thompson och Rob Pike den 2 september 1992, under ett restaurangbesök i New Jersey.

[redigera] Se även

  • UTF-16, ett sätt att koda Unicode-texter i 16-bitars sekvenser (eller 2-bytes).

[redigera] Externa länkar

  • Unicode.se visar hur man ställer in sina webbplatser och andra databaser till UTF-8
Den här artikeln är hämtad från http://sv.wikipedia.org/wiki/UTF-8
Personliga verktyg