UTF-8
Wikipedia
UTF-8 (åtta-bitars Unicode transformationsformat) är en längdvarierande teckenkodning som används för att representera Unicodekodad text som sekvenser av oktetter (byteströmmar).
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 oktetter 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. T.ex. för websidor. 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 visa texten "första världskriget" kodad i UTF-8 som "första världskriget".
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.
[redigera] Beskrivning
Om den mest signifikanta biten i den ledande oktetten är noll, är det ett ASCII-tecken (kodat i en oktett/byte). Annars ger antalet mest signifikanta ett-bitar (före första noll-biten) i första oktetten sekvensens längd, vilket kan vara två till fyra. De kodpunkter som kan representeras är begränsat till U+0000 - U+10FFFF utom surrogatkodpunkter. Om sekvensen spänner över flera bytes, startar följdoktetterna alltid med bitmönstret 10. Representationer som använder fler bytes än nödvändigt är felaktiga. Kodsekvenser som skulle representera surrogatkodpunkter ä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.
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+DBFF): |
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 (), 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 (0xFFFF), 2048 surrogatkoder undantagna), och med fyra bytes kan alla kodpunkter (utom surrogatkodpunkter) upp till U+10FFFF representeras. För kodpunkter upp till U+FFFF kan upp till tre bytes krävas. För kodpunkter upp till U+10FFFF kan upp till fyra oktetter/bytes behövas.
Exempel på skriftsystem som kräver två bytes per tecken i UTF-8 är (de flesta) latinska tecken, grekiska, kyrilliska, armenska, hebreiska och arabiska.
[redigera] Historik
UTF-8 uppfanns av Ken Thompson och Rob Pike den 2 september 1992, under ett restaurangbesök i New Jersey.