Tietojenkäsittelytieteen UTF-16 ( Unicode Transformation Format ) on yksi tavoista koodata merkkejä Unicodesta 16- bittisten sanojen sekvenssinä .
Tällä koodauksella voit kirjoittaa Unicode-merkkejä alueilla U+0000..U+D7FF ja U+E000..U+10FFFF (yhteensä 1 112 064 ). Tässä tapauksessa jokainen merkki kirjoitetaan yhdellä tai kahdella sanalla (korvikepari). UTF-16-koodaus on kuvattu kansainvälisen standardin ISO/IEC 10646 liitteessä Q, ja se katetaan myös IETF RFC 2781 :ssä "UTF-16, ISO 10646:n koodaus".
Unicoden ensimmäinen versio (1991) oli 16-bittinen kiinteän leveyden koodaus; eri merkkien kokonaismäärä oli 2 16 ( 65 536 ). Unicoden toisessa versiossa (1996) päätettiin laajentaa koodialuetta merkittävästi; ylläpitää yhteensopivuutta niiden järjestelmien kanssa, joissa 16-bittinen Unicode oli jo otettu käyttöön ja UTF-16 luotu. Korvauspareille varattu alue 0xD800-0xDFFF kuului aiemmin "yksityiskäyttöön tarkoitettujen hahmojen" -alueeseen.
Koska UTF-16:ssa voidaan näyttää 2 20 +2 16 −2048 ( 1 112 064 ) merkkiä , tämä numero valittiin Unicode-kooditilan uudeksi arvoksi.
DC00 | … | DFFE | DFF | |
---|---|---|---|---|
D800 | 010000 | … | 0103FE | 0103FF |
D801 | 010400 | … | 0107FE | 0107FF |
… | … | |||
DBFF | 10FC00 | … | 10FFFE |
UTF-16:ssa merkit koodataan kaksitavuisiksi sanoiksi käyttäen kaikkia mahdollisia arvoalueita (0 - FFFF 16 ). On mahdollista koodata Unicode-merkkejä 0000 16 ..D7FF 16 ja E000 16 ..FFFF 16 . Tästä pois jätettyä aluetta D800 16 ..DFFF 16 käytetään vain ns. korvikeparien koodaamiseen - merkit, jotka on koodattu kahdella 16-bittisellä sanalla.
Unicode-merkit aina FFFF 16 :een asti (pois lukien korvikkeiden alue) kirjoitetaan sellaisenaan 16-bittisen sanan kanssa.
Merkit alueella 10000 ..10FFFF 16 (yli 16 bittiä) koodataan seuraavan kaavan mukaan :
Yksittäinen UTF-16-merkki esitetään kahden tavun tai kahden tavuparin sarjana. Kumpi kahdesta tavusta on ensin, korkea vai alhainen, riippuu endiaalisuudesta . x86-suorittimien kanssa yhteensopivaa järjestelmää kutsutaan little endianiksi , kun taas m68k- ja SPARC- prosessoreilla varustettuja järjestelmiä kutsutaan big endianiksi .
Tavujärjestysmerkkiä käytetään tavujärjestyksen määrittämiseen . _ Tekstin alkuun kirjoitetaan koodi U+FEFF. Jos luettaessa otettiin huomioon U+FFFE U+FEFF:n sijaan, tavujärjestys käännetään (pieni endian), koska Unicoden U+FFFE-koodi ei koodaa merkkiä ja se on varattu vain tavun määrittämiseen. Tilaus. Koska UTF-8 ei käytä arvoja 0xFE ja 0xFF, voit käyttää tavujärjestysmerkkiä ominaisuutena UTF-16:n ja UTF-8:n erottamiseen.
On myös mahdollista määrittää tavujärjestys ulkoisesti - tätä varten koodaus on kuvattava nimellä UTF- 16LE tai UTF-16BE (little-endian / big-endian), eikä vain UTF-16. Tässä tapauksessa tavujärjestysmerkkiä (U+FEFF) ei tarvita.
Microsoft Windows -käyttöjärjestelmän moderneissa versioissa yleisessä Win32 API : ssa on kaksi tapaa esittää tekstiä: perinteisten 8-bittisten koodisivujen muodossa ja UTF-16:n muodossa.
Käytettäessä UTF-16:ta Windows ei aseta rajoituksia sovellusten tekstitiedostojen koodauksille, joten ne voivat käyttää sekä UTF-16LE:tä että UTF-16BE:tä asettamalla ja tulkitsemalla sopivan tavujärjestysmerkin . Windowsin sisäinen muoto on kuitenkin aina UTF-16LE. Tämä seikka tulee ottaa huomioon, kun työskentelet suoritettavien tiedostojen kanssa , jotka käyttävät WinAPI-toimintojen Unicode-versioita. Niiden merkkijonot on aina koodattu UTF-16LE:llä [1] .
NTFS - tiedostojärjestelmissä sekä pitkiä nimiä tukevassa FAT - tiedostojärjestelmässä tiedostojen nimet kirjoitetaan myös UTF-16LE-muodossa.
Alla olevat esimerkit on kirjoitettu pseudokoodilla eivätkä ota huomioon tavujärjestyksen maskia - ne osoittavat vain koodauksen olemuksen. Tavujärjestys - nuoremmasta vanhempaan (Little-Endian, Intel x86). Tyyppi Word on kaksitavuinen sana (16-bittinen etumerkitön kokonaisluku) ja tyyppi UInt32 on 32-bittinen etumerkitön kokonaisluku. Heksadesimaaliarvot alkavat dollarimerkillä "$".
Esimerkissä WriteWord() ehdollinen toimintosarja, joka kirjoittaa yhden sanan (siirrettäessä sisäistä osoitinta). Funktio LoWord()palauttaa 32-bittisen kokonaisluvun vähiten merkitsevän sanan (suuremmat bitit hylätään katsomatta).
// Kelvolliset koodin arvot: $0000..$D7FF, $E000..$10FFFF. Toimenpide WriteUTF16Char ( Koodi : UInt32 ) If ( Koodi < $ 10000 ) Sitten KirjoitaWord ( LowWord ( Code ) ) Else Code = Code - $ 10000 Muutt Lo10 : Sana = LowWord ( Koodi ja $ 3FF ) Muut Hi10 : Sana = LoWord ( Koodi ) WriteWord ( $D800 tai Hi10 ) WriteWord ( $DC00 tai Lo10 ) End If End -menettelyEsimerkki ReadWord()lukee sanan virrasta (siirtää sisäistä osoitinta). Se voi myös tarvittaessa säätää tavujärjestystä. Funktio WordToUInt32laajentaa kaksitavuisen sanan nelitavuiseksi etumerkittömäksi kokonaisluvuksi ja täyttää korkeat bitit nolilla. Error()katkaisee suorituksen (olennaisesti poikkeus ).
// Jos onnistuu, arvot // välillä $0000..$D7FF ja $E000..$10FFFF palautetaan. Funktio ReadUTF16Char : UInt32 Muuttaja Alkusana : Sana // Johtava (ensimmäinen) sana . Muutt Trailing : Word // Seuraa (toista) sanaa. Johtava = ReadWord () ; If ( Leading < $D800 ) Tai ( Leading > $DFFF ) Then Return WordToUInt32 ( Leading ) Else If ( Leading > = $DC00 ) Then Error ( " Virheellinen koodisarja . " ) Else Muuttujakoodi : UInt32 Code = WordToUInt32 ( Johtava ja $3FF ) Shl 10 Trailing = ReadWord () If (( Trailing < $DC00 ) Tai ( Trailing > $DFFF )) then Error ( "Virheellinen koodisekvenssi . " ) Else Code = Koodi tai WordToUInt32 ( Loppu ja $ 3FF ) Paluu ( Koodi + $10000 ) End If End If End -toimintoMerkkien koodaukset | |
---|---|
Historialliset koodaukset | lisäkomp. semafori (Makarov) morsia Bodo MTK-2 comp. 6-bittinen SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
moderni 8-bittinen esitys | symboleja ASCII ei-ASCII 8-bittiset koodisivut Kyrillinen KOI-8 Peruskoodaus MacCyrillic ISO 8859 1 (lat.) 2 3 neljä 5 (kir.) 6 7 kahdeksan 9 kymmenen yksitoista 12 13 neljätoista 15 (€) 16 Windows 1250 1251 (kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM ja DOS 437 850 852 855 866 "vaihtoehto" MIC |
Monitavu | perinteinen DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 merkkiluettelo Kyrillinen |
käyttöliittymä näppäimistöasettelu alue rivin käännös fontti translitterointi mukautettuja fontteja apuohjelmia iconv ennätys |