Кіріспе

Unicode-тің өзгермелі енді кодтамасы, бір немесе екі 16 биттік код бірліктерін пайдаланады. UTF-16 (16 биттік Unicode түрлендіру форматы) – Unicode-тің барлық 1,112,064 жарамды код нүктесін кодтауға қабілетті таңба кодтамасы (әрине, код нүктелерінің саны UTF-16 дизайнымен анықталады). Кодтау өзгермелі ұзындықты, себебі код нүктелері бір немесе екі 16 биттік код бірлікпен кодталады. UTF-16 бұрынғы ескірген 16 биттік кодтамадан пайда болды, ол қазір UCS-2 (2 байттық Universal Character Set үшін) деп аталады. 216 (65,536) код нүктесінің қажеттігі анықталғаннан кейін, оның ішінде көптеген эмодзилер мен маңызды CJK таңбалары (мысалы, жеке және жер атаулары) енгізілді. UTF-16 Microsoft Windows API, Java бағдарламалау тілі және JavaScript/ECMAScript сияқты жүйелерде қолданылады. Ол кейде Microsoft Windows жүйесінде қарапайым мәтін және мәтін өңдеу деректері үшін де қолданылады. SMS жүйесінде де қолданылады (SMS стандарты UCS-2 деп белгілейді, бірақ көптеген пайдаланушылар эмодзилер жұмыс істеуі үшін UTF-16 қолданады). UTF-16 – ASCII-мен үйлеспейтін және вебте ешқашан танымал болмаған жалғыз кодтау (әлі де рұқсат етілген), оны веб-беттердің 0,004%-дан азы қолданады (солардың көпшілігі шын мәнінде UTF-8, бірақ қате белгіленген). Қарама-қарсылығында, UTF-8 барлық веб-беттердің 98%-ын құрайды. Веб гипермәтінді қолдану технологиясы жөніндегі жұмыс тобы (WHATWG) UTF-8-ді «барлық [мәтін үшін міндетті кодтау» деп санайды және қауіпсіздік себептерімен браузерлік қолданбалар UTF-16 қолданбауы керек деп есептейді.

Тарих

1980 жылдардың аяғында "Universal Character Set" (UCS) үшін бірыңғай кодтауды әзірлеу жұмыстары басталды, ол бұрынғы тілге қатысты кодтауларды бір үйлестірілген жүйемен алмастыруға арналған еді. Мақсаты – әлемнің көптеген тілдеріндегі қажетті барлық таңбаларды, сондай-ақ ғылым, математика және музыка сияқты техникалық салалардан алынған символдарды қамту болатын. Бастапқы идея – әр таңбаға 1 байт қажет ететін, әдеттегі 256 таңбалық кодтауды, әр таңбаға 2 байт (16 бит) қажет ететін 65 536 (216) мәнді кодтаумен алмастыру еді. Бұл жұмысты екі топ бірдей жүргізді: ISO/IEC JTC 1/SC 2 және Unicode консорциумы, екіншісі негізінен есептеу техникасын өндірушілерді білдіретін. Екі топ даму кезінде кодтаулардың өзара үйлесімді болуын қамтамасыз ету үшін таңбаларын синхрондауға тырысты. Алғашқы 2 байттық кодтау бастапқыда "Unicode" деп аталды, бірақ қазір "UCS 2" деп аталады. 216 таңба жеткіліксіз екені анық болғаннан кейін, IEEE үлкен 31 биттік кеңістік пен әр таңбаға 4 байт қажет болатын (UCS 4) кодтауды ұсынды. Unicode консорциумы бұған қарсылық көрсетті, себебі әр таңбаға 4 байт көп жад пен дискілік кеңістікті қажет етеді, сонымен қатар кейбір өндірушілер 2 байттық таңба технологиясына көп инвестиция салған еді. 1996 жылдың шілдесінде Unicode стандартының 2.0 нұсқасымен бірге UTF-16 кодтау схемасы ұсынылды. Ол RFC 2781 құжатында толық сипатталған, ол 2000 жылы IETF ұйымы тарапынан жарияланды. UTF-16 халықаралық ISO/IEC 10646 стандартының және Unicode стандартының соңғы нұсқаларында көрсетілген. "UCS 2 қазір ескірген деп есептелуі керек. Бұл енді 10646 немесе Unicode стандартындағы кодтау түріне сілтеме жасамайды." (Өзін-өзі синхрондау кодын сақтайтын кез келген схема тізбекті бастау үшін кем дегенде бір Негізгі көптілді жазықтық (BMP) кодтық нүктесін бөлуді талап етеді. Кодтық нүктенің мақсатын өзгертуге рұқсат жоқ.)

Сипаттама

Әрбір Юникод код нүктесі бір немесе екі 16 биттік код бірлігі ретінде кодталады. 216-дан кіші код нүктелері ("BMP-де") бұрынғы UCS-2 стандартындағыдай, код нүктесінің сандық мәніне тең болатын бір 16 биттік код бірлігімен кодталады. 216-ға тең немесе одан жоғары код нүктелері ("BMP-ден жоғары") екі 16 биттік код бірлігін пайдаланып кодталады. Бұл екі 16 биттік код бірлігі UTF-16 орнына (surrogate) диапазонынан таңдалады, бұл диапазон бұрын символдарға тағайындалмаған. Осы диапазонның мәндері символ ретінде қолданылмайды және UTF-16 оларды жеке код нүктелері ретінде кодтаудың заңды тәсілін ұсынбайды. Сондықтан UTF-16 ағыны орнына (surrogate) диапанынан тыс 16 биттік кодтардан және орнына (surrogate) диапанына кіретін 16 биттік мәндердің жұптарынан тұрады.

U+0000 - U+D7FF және U+E000 - U+FFFF

UTF-16 және UCS-2 осы диапазон ішіндегі кодтық нүктелерді сандық тұрғыдан сәйкес кодтық нүктелерге тең болатын 16 биттік код бірліктері түрінде кодтайды. Негізгі көптілді жазықтықтағы (BMP) осы кодтық нүктелер ғана UCS-2 форматында бейнелене алады. Unicode 9.0 нұсқасынан бастап, кейбір заманауи латын әліпбиін қолданбаған Азия, Таяу Шығыс және Африка жазу жүйелері, сондай-ақ көптеген эмодзи символдары осы диапазоннан тысқары шығады.