UTF-16

Från Rilpedia

Hoppa till: navigering, sök
Wikipedia_letter_w.pngTexten från svenska WikipediaWikipedialogo_12pt.gif
rpsv.header.diskuteraikon2.gif

UTF-16 (16 bitars unicode transformationsformat) är inom datatekniken en längdvarierande teckenkodning som används för att representera Unicodetext som sekvenser av dubbel-oktetter (16-bitstal).

UTF-16 är standardiserad inom Unicode och ISO/IEC 10646. UTF-16 är en utvidgning av UCS-2, gjord så att all UCS-2-data är också UTF-16-data. Men för UTF-16 har vissa kodvärden reserverats för att, i par, kunna referera till tecken vars kodpunkter är större än 65535 (U+FFFF), s.k. supplementära tecken. Ursprungligen planerades Unicode klara sig med 16 bitar och UTF-16 var Unicode utan transformation. Det finns dock så många kinesiska tecken om alla ovanliga räknas med, att fler bitar behövdes.


Användning internt i program

Som intern kodning i program är kodningen direkt baserad på 16-bitars tal. Kodningen refereras då till som en CEF, Character Encoding Format. Huruvida dessa tal är representerade som "big-endian" eller "little-endian", är då en helt intern sak på låg nivå. I programmen behandlar man dem som 16-bitars tal. Eftersom tecken över 0xFFFF är sällan använda (t.ex. utdöda språk och ovanliga kinesiska tecken), tar många programvaruföretag sig friheten att bara stödja tecken upp till 0xFFFF, egentligen ska man använda UTF-16-algoritmen för högre tecken koder om man lagrar 16-bits-koder.

Användning i filer

Som extern kodning (filer, dataöverföring av text) måste man dock, som det heter, serialisera 16-bitars-talen till en följd av 8-bitars-tal, då all datakommunikation idag är baserad på oktetter (8-bitars bytes). Kodningen refereras då till som en CES, Character Encoding Scheme. (Eventuell ytterligare serialisering, till till exempel 4 bitar eller en bit i taget, plus extra bitar för felkorrigering, m.m. sker på lägre nivå.) Denna serialisering till oktetter kan vara antingen big-endian (mest signifikanta oktetten först), även kallad "network byte order", eller little-endian (minst signifikanta oktetten först).

Som extern kodning, och registrerade av IANA, är det därför tre kodningar: UTF-16BE (big-endian), UTF-16LE (little-endian). Big-endian är att föredra, då detta är den konventionella "network byte order", och formellt sett den oktettordning som ISO/IEC 10646 föreskriver. Little-endian är vanligare, eftersom Windows körs på processorer med little-endian. Unicode tillåter dock även formellt båda serialiseringarna. UTF-16 (utan BE eller LE) är även den registrerad som en charset av IANA. Det är då big-endian, men om "filen" (motsv.) börjar med en byte-ordningsindikation (BOM, byte order mark, U+FEFF), så är det BOM som avgör vilken byte-serialisering som resten av filen har. BOM ingår då inte i text-innehållet i filen, och skall tas bort vid deserialisering.

UTF-16(BE|LE) kan användas för webbsidor och andra filer, både lokalt och publikt. För e-post kan UTF-16 dock av olika skäl inte användas, utan då får man använda UTF-8 istället (tillsammans med ESMTP/8BITMIME).

I det mest använda programmet för rena textfiler, Windows Notepad, kan man välja kodning i "spara som"-menyn. En av dem kallas "Unicode" och är UTF-16LE. Det finns möjlighet att välja UTF-16BE, UTF-8 eller ANSI (8-bitars) istället (default är "ANSI" i västeuropiska windowsversioner). Windows Notepad sparar en BOM (byte order mark) först om det är Unicode, och om filen innehåller till exempel en HTML-sida känns den då omedelbart igen av webläsaren sin Unicode oberoende av vad som står i HTML-huvudet eller är inställt i webläsarmenyn. Linux brukar ha UTF-16BE och brukar inte spara en BOM först.

Beskrivning av kodningen

För unicodetecken inom intervallet U+0000 - U+FFFF kodar man 16 bitar oförändrat. Unicodetecken inom intervallet U+D800 - U+DFFF är dock inte tillåtna att använda. De är enligt Unicodestandarden reserverade för tecken som kommer ur UTF-16:s algoritm (se nedan), och får inte betyda skrivbara tecken. De kallas också surrogatkodpunkter.

För unicodetecken inom intervallet U+10000 - U+10FFFF får man två 16-bitstal på följande sätt: Man subtraherar först U+10000. Sedan tar man de bitar som är ovanför de 10 lägsta bitarna och adderar U+D800 vilket blir det första 16-bitstalet. Efter det tar man de 10 lägsta bitarna och adderar U+DC00 vilket blir det andra 16-bitstalet.

Till exempel: Det första tecknet på det gamla gotiska alfabetet (som nog inte stöds av din dator, men ser ut så här i så fall: 𐌰 ) har i Unicode [1] kodpunkten U+10330 vilket blir D800 DF30 (D800+000 DC00+330) i UTF-16. Ett annat exempel är från Unicodes notskrift-koder (musik) där G-klaven har koden U+1D11E vilket blir D834 DD1E (D800+034 DC00+11E) i UTF-16. Ännu så länge (2006) stödjer Windows inte några tecken över U+10000 alls.

Personliga verktyg