UTF-16

UTF-16 (англ. Unicode Transformation Format) в информатике — один из способов кодирования символов из Юникода в виде последовательности 16-битных слов.

Данная кодировка позволяет записывать символы Юникода в диапазонах U+0000..U+D7FF и U+E000..U+10FFFF (общим количеством 1 112 064). При этом каждый символ записывается одним или двумя словами (последнее называется суррогатная пара). Кодировка UTF-16 описана в приложении Q к международному стандарту ISO/IEC 10646, а также ей посвящён IETF RFC 2781 «UTF-16, an encoding of ISO 10646».

История появления

Первая версия Юникода (1991 г.) представляла собой 16-битную кодировку с фиксированной шириной символа; общее число разных символов было 216 (65 536). Во второй версии Юникода (1996 г.) было решено значительно расширить кодовую область; для сохранения совместимости с теми системами, где уже был реализован 16-битный Юникод, и была создана UTF-16. Область 0xD800—0xDFFF, отведённая для суррогатных пар, ранее принадлежала к области «символов для частного использования».

Поскольку в UTF-16 можно отобразить 220+216−2048 (1 112 064) символов, то это число и было выбрано в качестве новой величины кодового пространства Юникода.

Принцип кодирования

DC00 DFFE DFFF
D800 010000 0103FE 0103FF
D801 010400 0107FE 0107FF
DBFF 10FC00 10FFFE  

В UTF-16 символы кодируются двухбайтовыми словами с использованием всех возможных диапазонов значений (от 0 до FFFF16). При этом можно кодировать символы Unicode в диапазонах 000016..D7FF16 и E00016..FFFF16. Исключенный отсюда диапазон D80016..DFFF16 используется как раз для кодирования так называемых суррогатных пар — символов, которые кодируются двумя 16-битными словами.

Символы Unicode до FFFF16 включительно (исключая диапазон для суррогатов) записываются как есть 16-битным словом.

Символы же в диапазоне 1000016..10FFFF16 (больше 16 бит) кодируются по следующей схеме:

  • Из кода символа вычитается 1000016. В результате получится значение от нуля до FFFFF16, которое помещается в разрядную сетку 20 бит.
  • Старшие 10 бит (число в диапазоне 000016..03FF16) суммируются с D80016, и результат идёт в ведущее (первое) слово, которое входит в диапазон D80016..DBFF16.
  • Младшие 10 бит (тоже число в диапазоне 000016..03FF16) суммируются с DC0016, и результат идёт в последующее (второе) слово, которое входит в диапазон DC0016..DFFF16.

Порядок байтов

Один символ кодировки UTF-16 представлен последовательностью двух байтов или двух пар байтов. Который из двух байтов идёт впереди, старший или младший, зависит от порядка байтов. Систему, совместимую с процессорами x86, называют little endian, а с процессорами m68k и SPARC — big endian.

Для определения порядка байтов используется метка порядка байтов (англ. Byte order mark). В начале текста записывается код U+FEFF. При считывании, если вместо U+FEFF считалось U+FFFE, значит порядок байтов обратный (little endian), поскольку код U+FFFE в Юникоде не кодирует символ и зарезервирован как раз для целей определения порядка байтов. Так как в кодировке UTF-8 не используются значения 0xFE и 0xFF, можно использовать метку порядка байтов как признак, позволяющий различать UTF-16 и UTF-8.

UTF-16LE и UTF-16BE

Предусмотрена также возможность внешнего указания порядка байтов — для этого кодировка должна быть описана как UTF-16LE или UTF-16BE (little-endian / big-endian), а не просто UTF-16. В этом случае метка порядка байтов (U+FEFF) не нужна.

UTF-16 в ОС Windows

В API Win32, распространённом в современных версиях операционной системы Microsoft Windows, имеется два способа представления текста: в форме традиционных 8-битных кодовых страниц и в виде UTF-16.

При использовании UTF-16, Windows не накладывает ограничений на прикладные программы касательно кодирования текстовых файлов, позволяя им использовать как UTF-16LE, так и UTF-16BE посредством установки и трактовки соответствующей метки порядка байтов. Однако внутренний формат Windows — всегда UTF-16LE. Этот момент следует учитывать при работе с исполняемыми файлами, использующими юникодовые версии функций WinAPI. Строки в них всегда кодируются в UTF-16LE[1].

В файловых системах NTFS, а также FAT с поддержкой длинных имён, имена файлов записываются также в UTF-16LE.

Примеры процедур

Примеры ниже записаны на псевдокоде и в них не учитывается маска порядка байтов — они лишь показывают суть кодирования. Порядок байтов — от младшего к старшему (Little-Endian, интеловский x86). Тип Word — двухбайтовое слово (16-битное беззнаковое целое), а тип UInt32 — 32-битное беззнаковое целое. Шестнадцатеричные значения начинаются со знака доллара «$».

Кодирование

В примере WriteWord() — условная процедура, которая пишет одно слово (при этом сдвигает внутренний указатель). Функция LoWord() возвращает младшее слово от 32-битного целого (старшие биты, не глядя, отбрасываются).

// Допустимые значения Code: $0000..$D7FF, $E000..$10FFFF.
Procedure WriteUTF16Char(Code: UInt32)
    If (Code < $10000) Then
        WriteWord(LoWord(Code))
    Else
        Code = Code - $10000
        Var Lo10: Word = LoWord(Code And $3FF)
        Var Hi10: Word = LoWord(Code Shr 10)
        WriteWord($D800 Or Hi10)
        WriteWord($DC00 Or Lo10)
    End If
End Procedure

Декодирование

В примере ReadWord() читает слово из потока (сдвигая при этом внутренний указатель). Она же при необходимости может корректировать порядок байтов. Функция WordToUInt32 расширяет двухбайтовое слово до четырёхбайтового беззнакового целого, заполняя старшие биты нулями. Error() прерывает выполнение (по сути исключение).

// В случае успеха возвращаются значения
// в диапазонах $0000..$D7FF и $E000..$10FFFF.
Function ReadUTF16Char: UInt32
    Var Leading:  Word  // Лидирующее (первое) слово.
    Var Trailing: Word  // Последующее (второе) слово.

    Leading = ReadWord();
    If (Leading < $D800) Or (Leading > $DFFF) Then
        Return WordToUInt32(Leading)
    Else If (Leading >= $DC00) Then
        Error("Недопустимая кодовая последовательность.")
    Else
        Var Code: UInt32
        Code = WordToUInt32(Leading And $3FF) Shl 10
        Trailing = ReadWord()
        If ((Trailing < $DC00) Or (Trailing > $DFFF)) Then
            Error("Недопустимая кодовая последовательность.")
        Else
            Code = Code Or WordToUInt32(Trailing And $3FF)
            Return (Code + $10000)
        End If
    End If
End Function

Примечания

  1. Using Byte Order Marks (англ.). Дата обращения: 18 февраля 2016. Архивировано 22 января 2016 года.

Ссылки

Read other articles:

Italian community in Somalia Italian SomalisItalo-somali (Italian)Postcard of Downtown Mogadishu in 1936. At the centre is the Catholic Cathedral, similar to that of Cefalù in Sicily and now destroyed. Near the Cathedral, the Arch monument is to commemorate King Umberto I of Italy.Total population50,000 (Italian Somaliland, 1940[1][2] 5% of the population)Regions with significant populationsMogadishu, JanaleLanguagesItalian, SomaliReligionRoman Catholic, IslamRelated eth...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (يونيو 2018) راما سليم معلومات شخصية الميلاد 20 مارس 1993 (العمر 30 سنة)مومباسا  مركز اللعب مهاجم  الجنسية كينيا  معلومات النادي النادي الحالي MFK Topolcany المسيرة الاحترا...

 

Manset rotatorPengidentifikasiMeSHD017006TA22461FMA37018Daftar istilah anatomi[sunting di Wikidata] 10. Manset rotator: 11. Supraspinatus, 12. Subscapularis, 13. Infraspinatus, 14. Teres minor Manset rotator adalah istilah anatomi yang diberikan pada sekelompok otot dan tendonnya yang bertindak menstabilkan bahu. Bersama dengan otot teres major dan deltoideus, keempat otot manset rotator menyusun 6 otot scapulohumerus (yang menghubungkan humerus dengan skapula) tubuh manusia. Fungsi Otot-...

Ner tamid di kuil peribadatan Yahudi Ner tamid adalah pelita kecil yang tergantung dalam sinagoge, tempat peribadatan orang Yahudi. Ner tamid biasanya menyala sepanjang tahun, dan para rabbi akan menjaga agar api dalam pelita itu tetap menyala. Bentuknya yang kecil membuat ner tamid ditempatkan pada tempat tertentu dalam sinagoge. (oleh rooy john salamony-Jakarta desember 2009) Artikel bertopik Yahudi ini adalah sebuah rintisan. Anda dapat membantu Wikipedia dengan mengembangkannya.lbs

 

Mexican telenovela Soltero con hijasGenreTelenovelaWritten by Pablo Ferrer Santiago Pineda Hugo Moreno Directed by Aurelio Ávila Ivonne Cartas Starring Vanessa Guzmán Gabriel Soto Theme music composer Eduardo Murguía Mauricio Arriaga Opening themeSolteroby Los Ángeles Azules & Luis Coronel[1]Ending themeLa Playita by Emilio Osorio[1]Country of originMexicoOriginal languageSpanishNo. of seasons1No. of episodes87 (list of episodes)ProductionExecutive producerJuan OsorioP...

 

German free-to-air television channel For other uses, see Phoenix. Television channel PhoenixCountryGermanyBroadcast areaGermany, Austria, SwitzerlandHeadquartersBonn, GermanyProgrammingLanguage(s)GermanPicture format1080p HDTV(downscaled to 720p for the DTT and Cable feed)OwnershipOwnerARD and ZDFHistoryLaunched7 April 1997; 26 years ago (1997-04-07)AvailabilityTerrestrialDigital terrestrial televisionVaries within locationsStreaming mediaphoenix.deWatch live Phoenix (styli...

Meidensha Corporation株式会社明電舎JenisPublik K.K.Kode emitenTYO: 6508Templat:NAGKomponen Nikkei 225IndustriPeralatan listrikDidirikan22 Desember 1897PendiriHosui ShigemuneKantorpusatThinkPark Tower, 2-1-1 Osaki, Shinagawa-ku, Tokyo, 141-6029 JepangTokohkunciYuji Hamasaki, (Chairman)Takeshi Miida, (Presiden)ProdukSistem infrastruktur sosialSistem industriPerawatan dan perbaikanLahan yasanPendapatan JPY 230,3 milyar (FY 2014) (US$ 1,91 milyar) (FY 2014)Laba bersih JPY 6,8 milyar (FY 20...

 

Este artigo não cita fontes confiáveis. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Maio de 2011) Coordenadas: 41° 8' 47.59 N 8° 36' 56.52 O Edifíco da Academia Politécnica, onde funcionou a Faculdade de Ciências e agora está instalada a reitoria e diversos museus. A Reitoria da Universidade do Porto é um edifício hist...

 

Mitosis in real time Mitosis adalah suatu pembelahan sel melalui tahap-tahap profase, metafase, anafase, dan telofase. Tujuan mitosis adalah untuk pertumbuhan dan regenerasi yang menghasilkan dua sel anak yang identik dengan sel induk semula. Mitosis hanya terjadi sekali dan hanya berlangsung selama somatisasi.[1] Mitosis umumnya diikuti sitokinesis yang membagi sitoplasma dan membran sel. Proses ini menghasilkan dua sel anak yang identik, yang memiliki distribusi organel dan komponen...

Canadian newspaper and news website The Hill TimesFront page of the December 5, 2011, issue of The Hill TimesTypeTwice weekly newspaper, daily news websiteOwner(s)Hill Times PublishingFounder(s)Jim Creskey and Ross DicksonPublisherAnne Marie Creskey, Jim Creskey, Ross Dickson and Leslie DicksonEditorKate MalloyManaging editorCharelle EvelynFounded1989LanguageEnglishHeadquarters246 Queen StreetSuite 200Ottawa, OntarioK1P 5E4ISSN0848-0427Websitewww.hilltimes.com The Hill Times is a Canadian twi...

 

المرخية الاسم الكامل نادي المرخية الرياضي الأسماء السابقة الاتفاق (1995 - 2004) اللقب أهل الحزم تأسس عام 1995 (منذ 28 سنة) الملعب ملعب المرخية(السعة: 300) البلد  قطر الدوري دوري نجوم قطر الإدارة علي حمد المسيفري مسفر حمد المسيفري الموقع الرسمي www.almarkhiyasc.qa الطقم الرسمي الطقم الأساسي ...

 

South Korean boy band A.cian (에이션)Background informationOriginSeoul, South KoreaGenresK-popYears active2012 (2012)–2020LabelsWings EntertainmentElijah EntertainmentMembers Jungsang Hyeokjin Sanghyun Jin.O Past members U-Tae Seulgi Chanhee Crooge Hidden Lo-J Sehee Websitewww.wingsent.com A.cian (Korean: 에이션; pronounced Asian) is a South Korean boy band formed by Wings Entertainment (formerly ISS Entertainment) in Seoul, South Korea.[1] The group currently co...

Ancient Greek currency This article is about the currency used in ancient Greece. For other uses, see drachma. In ancient Greece, the drachma (Greek: δραχμή, romanized: drachmḗ, [drakʰmέː]; pl. drachmae or drachmas) was an ancient currency unit issued by many city-states during a period of ten centuries, from the Archaic period throughout the Classical period, the Hellenistic period up to the Roman period. The ancient drachma originated in the Greece around the 6th cen...

 

Bundesliga AustriaBadan yang mengaturÖsterreichische Fußball-BundesligaNegara AustriaKonfederasiUEFADibentuk1974Jumlah tim12Tingkat pada piramida1Degradasi keLiga Kedua Sepak Bola AustriaPiala domestikPiala AustriaPiala internasionalUEFA Champions LeagueUEFA Europa LeagueUEFA Europa Conference LeagueJuara bertahan ligaRed Bull Salzburg (17 gelar) (2022–23)Klub tersuksesSK Rapid Wina (32 gelar)Pencetak gol terbanyakHans Krankl (270)Televisi penyiarDomestikORFSky Sport AustriaInternasionalO...

 

Spanish actor Antonio GarridoAntonio at the photocall of Alice in Wonderland in 2010.BornJoaquín Reyes (1971-08-20) 20 August 1971 (age 52)Seville, Province of Seville, Andalusia, SpainOccupation(s)Actor and TV presenter Antonio Jesús Garrido Benito (born 20 August 1971 in Seville, Province of Seville, Andalusia, Spain) is a Spanish actor and TV presenter. He started in a theatre company, taking part in several plays like Bajarse al moro, Breve Brecht, Un nuevo mundo, El barbero de Sev...

Japanese automobile association Japanese Automobile Federation一般社団法人日本自動車連盟AbbreviationJAFFormation1963; 60 years ago (1963)LocationMinato, Tokyo, JapanPresidentKazuhiro FujiiWebsitewww.jaf.or.jp The Japan Automobile Federation (一般社団法人日本自動車連盟, Nihonjidōsharenmei) is an automobile association based in Minato, Tokyo. Founded in 1963, the main purpose of the organization is to handle various businesses related to automobiles,...

 

Separation of a desired substance from other substances in the sample For other uses, see Extraction. This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article may require cleanup to meet Wikipedia's quality standards. The specific problem is: content is non-encyclopedic in scope and level of expertise exhibited, and lacks inline citation of any of many available substantial secondary ...

 

Former British department store chain British Home StoresTrade nameBritish Home StoresTypePrivateIndustryRetailFounded1928; 95 years ago (1928) Brixton, LondonFateSolely OnlineSuccessorBHS.comHeadquartersLiverpool Street, London, United KingdomArea servedUnited Kingdom, Kazakhstan, Uzbekistan, Middle EastProductsClothingLingerieHomewareLightingOwnerAl Mana GroupWebsitebhs.com British Home Stores, commonly abbreviated to BHS and latterly legally styled BHS Ltd, was a British ...

Indonesian businessman Tomy WinataBornGuo Shuo Feng郭說鋒 (1958-07-23) 23 July 1958 (age 65)Pontianak, IndonesiaOccupationsEntrepreneurphilanthropistKnown forFounder of Artha Graha Group and Artha Graha Peduli Foundation Tomy Winata (pronounced [ˈtomi wiˈnata] and sometimes misspelled as Tommy Winata; born Guo Shuo Feng, Chinese: 郭說鋒 on 23 July 1958) is an Indonesian businessman with interests in banking, property, and infrastructure, whose wealth comes from h...

 

9th-century Arab Muslim traditionist, jurist, and theologian Al-Fadl ibn Shadhan Mausoleum in Nishapur Abu Muḥammad al-Faḍl ibn Shadhan ibn Khalil al-Azdi al-Naysaburi (Arabic: أبومحمد الفضل بن شاذان بن خليل الأزدي النيسابوري), better known as al-Faḍl ibn Shadhan (d. 260 AH/873 AD) was an Arab Muslim traditionist, jurist, and theologian. He was highly regarded by the Imami Shi'a as one of the leading Imāmī scholars of his time.[1] Life ...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!