Кіріспе
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 қолданбауы керек деп есептейді.
UTF 16 (16 bit Unicode Transformation Format) is a character encoding capable of encoding all 1,112,064 valid code points of Unicode (in fact this number of code points is dictated by the design of UTF 16). The encoding is variable length, as code points are encoded with one or two 16 bit code units. UTF 16 arose from an earlier obsolete fixed width 16 bit encoding now known as UCS 2 (for 2 byte Universal Character Set), once it became clear that more than 216 (65,536) code points were needed, including most emoji and important CJK characters such as for personal and place names. UTF 16 is used by systems such as the Microsoft Windows API, the Java programming language and JavaScript/ECMAScript. It is also sometimes used for plain text and word processing data files on Microsoft Windows. It is used by SMS (the SMS standard specifies UCS 2, but almost all users actually implement UTF 16 so that emojis work). UTF 16 is the only encoding (still) allowed on the web that is incompatible with ASCII and never gained popularity on the web, where it is declared by under 0.004% of web pages (and many of these are actually UTF 8 but incorrectly marked). UTF 8, by comparison, accounts for over 98% of all web pages. The Web Hypertext Application Technology Working Group (WHATWG) considers UTF 8 "the mandatory encoding for all [text]" and that for security reasons browser applications should not use 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 нұсқасынан бастап, кейбір заманауи латын әліпбиін қолданбаған Азия, Таяу Шығыс және Африка жазу жүйелері, сондай-ақ көптеген эмодзи символдары осы диапазоннан тысқары шығады.