UTF-16

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Unicode
Codificări
UCS
Cartografiere
Text bidirecțional
BOM
Unificarea Han
Unicode și HTML

UTF-16 (Format de transformare Unicode, 16 biți) este o codificare a caracterelor Unicode în secvențe de numere de 16 biți . UTF-16 este definit oficial în anexa Q la standardul ISO / IEC 10646 și este descris în versiunea 3.0 și ulterioară a „ standardului Unicode ”, precum și în documentul IETF RFC 2781 .

Codificare UTF-16

În UTF-16, caracterele Unicode cu o valoare de până la 65535 (0xFFFF) sunt reprezentate cu valoarea lor numerică, exprimată în 16 biți. Caracterele din afara planului de bază multilingv , al căror cod este mai mare de 65535 (0xFFFF) și nu poate fi reprezentat direct cu 16 biți, sunt reprezentate cu o pereche surogat , adică o pereche de coduri în intervalul de la 0xD800 la 0xDFFF. De exemplu:

  • caracterul „A”, corespunzător codului 65 (0x41), este reprezentat ca 0x0041
  • caracterul 0x10000 devine perechea 0xD800, 0xDC00
  • caracterul 0x10FFFD, corespunzător limitei superioare a Unicode, este reprezentat cu secvența 0xDBFF, 0xDFFD.

Unicode nu atribuie niciunui caracter o valoare între 0xD800 și 0xDFFF, împiedicând astfel confundarea elementelor individuale ale unei perechi surogat cu un caracter Unicode valid.

Variante ale UTF-16

Fiecare punct de cod UTF-16 este stocat într-un număr întreg de 16 biți (uint16). Deoarece ordinea octeților dintr-un cuvânt variază în funcție de arhitectura computerului, UTF-16 are trei scheme de codificare, UTF-16, UTF-16LE ( Little Endian ) și UTF-16BE ( Big Endian ).

Codificarea UTF-16 necesită ca ordinea de octeți să fie declarată în mod explicit prin adăugarea unei mărci de ordine de octeți ca prefix la fiecare text codat. BOM este forma codificată a caracterului de lățime zero, spațiu care nu se rupe , corespunzător 0xFEFF hexadecimal, reprezentat ca 0xFE, 0xFF pe sistemele endian mari și 0xFF, 0xFE pe sistemele endian mici .

Codificările UTF-16BE și UTF-16LE sunt identice cu codificarea UTF-16, cu excepția faptului că ordonarea octeților este implicită, endian mare pentru UTF-16BE și endian mic pentru UTF-16LE. Caracterul 0xFEFF de la începutul unui text reprezentat cu oricare dintre aceste două codificări este tratat mai degrabă ca parte a textului decât ca o BOM.

IANA a aprobat numele UTF-16, UTF-16BE și UTF-16LE, atât majuscule, cât și minuscule, pentru utilizare pe Internet . Utilizate în mod obișnuit UTF_16 sau UTF16 nume pot fi recunoscute de limbaje de programare specifice sau aplicații, dar nu sunt în mod oficial valabile.

UTF-16 este reprezentarea textului nativ pentru versiunile bazate pe NT de Windows , limbajul de programare Java și mediile .NET și macOS Cocoa și Core.

Exemple

Caracter Unicode Nume Coduri UTF-16 caracter*
122 (hex 0x7A) Minuscule Z (scris latin) 007A z
27700 (hex 0x6C34) apă (chineză) 6C34
119070 (hex 0x1D11E) cheia lui Sol D834 DD1E 𝄞
„水, z, 𝄞” (apă, z, cheia lui G), codificat în UTF-16
tip de codificare ordinea de octeți secvența de octeți în memorie
UTF-16LE mic endian 34 6C, 7A 00, 34 D8 1E DD
UTF-16BE mare endian 6C 34, 00 7A, D8 34 DD 1E
UTF-16 mic endian, cu BOM FF FE, 34 6C, 7A 00, 34 D8 1E DD
UTF-16 mare endian, cu BOM FE FF, 6C 34, 00 7A, D8 34 DD 1E

* Sunt necesare fonturi și software compatibile Unicode pentru a afișa corect caracterele .

Procedura de codare UTF-16

Să presupunem că vrem să codificăm caracterul U + 64321 (hex 0x64321). Fiind mai mare de 0xFFFF, acesta trebuie reprezentat cu o pereche surogat, astfel:

 v = 0x64321
v ′ = v - 0x10000
   = 0x54321
   = 0101 0100 0011 0010 0001
vh = 0101010000 // 10 biți mari de v ′
vl = 1100100001 // 10 biți mici de v ′
w1 = 0xD800 // w1 și w2 sunt inițializate cu prima pereche surogat
w2 = 0xDC00
w1 = w1 | vh
   = 1101 1000 0000 0000 | 01 0101 0000
   = 1101 1001 0101 0000
   = 0xD950
w2 = w2 | vl
   = 1101 1100 0000 0000 | 11 0010 0001
   = 1101 1111 0010 0001
   = 0xDF21

Prin urmare, reprezentarea caracterului U + 64321 este următoarea pereche de cuvinte pe 16 biți:

 0xD950 0xDF21

Elemente conexe

linkuri externe