UTF-16
UTF-16 ( engleză pentru U niform Multiple-Octet Coded Character Set (UCS) T ransformation F ormat for 16 Planes of Group 00 ) este o codificare cu lungime variabilă pentru caracterele Unicode . UTF-16 este optimizat pentru caracterele utilizate frecvent din planul multilingv de bază (BMP) . Este cel mai vechi dintre formatele de codificare Unicode .
General
În codificarea UTF-16, fiecărui caracter Unicode i se atribuie un șir special codificat de una sau două unități de 16 biți , adică H. de doi sau patru octeți , astfel încât - ca și celelalte formate UTF - toate caracterele Unicode să poată fi mapate.
În timp ce UTF-8 are o importanță centrală în protocoalele de internet , UTF-16 este utilizat în multe locuri pentru reprezentarea internă a șirurilor de caractere , de ex. B. în versiunile actuale ale .NET , Java și Tcl .
caracteristici
Datorită codificării tuturor caracterelor BMP în doi octeți, codarea UTF-16 are spațiul necesar pentru textele care constau în principal din litere latine în comparație cu codarea ISO-8859 sau UTF-8 adecvate . Cu toate acestea, dacă multe caractere BMP sunt codificate dincolo de punctul de cod U + 007F, UTF-16 necesită o cantitate comparabilă de spațiu sau mai puțin decât UTF-8.
Spre deosebire de UTF-8, nu există o rezervă de codare. Dacă un text codat UTF-16 este interpretat ca ISO 8859-1 , toate literele conținute în ultima codificare pot fi recunoscute, dar separate prin zero octeți; cu alte codificări ISO-8859, compatibilitatea este mai proastă.
standardizare
UTF-16 este definit atât de Consorțiul Unicode , cât și de ISO / IEC 10646 . Unicode definește semantica suplimentară . O comparație mai precisă poate fi găsită în Anexa C a standardului Unicode 4.0. Standardul ISO a definit, de asemenea, o codificare UCS-2 , în care, totuși, sunt permise doar reprezentări pe 16 biți ale BMP.
Codificare
Conectați-vă pe BMP
Caracterele valide ale BMP (U + 0000 la U + D7FF și U + E000 la U + FFFF) sunt mapate fiecare direct la un singur cuvânt de 16 biți sau la doi octeți.
Semnați în afara BMP
Caracterele Unicode din afara BMP (adică U + 10000 până la U + 10FFFF) sunt reprezentate fiecare de două cuvinte pe 16 biți ( unități de cod ) care aparțin împreună, adică un total de patru octeți. (Adică 32 de biți, dar codificarea nu este UTF-32.)
Pentru a codifica un astfel de caracter în UTF-16, numărul 65536 (10000 hex = dimensiunea BMP) este mai întâi scăzut din numărul de cod al caracterului (numit aici U ), rezultând un număr U de 20 de biți în intervalul de la 00000 hex la FFFFF se creează hex . Aceasta este apoi împărțită în două blocuri de câte 10 biți:
- primul bloc (adică cei 10 biți mai semnificativi ai codului U ') este precedat de secvența de biți 11011 0 , cuvântul rezultat de 16 biți constând din doi octeți este cunoscut sub numele de surogat înalt
- al doilea bloc (adică cei 10 biți de ordin scăzut al codului U ') este precedat de secvența de biți 11011 1 , cuvântul rezultat de 16 biți de doi octeți este cunoscut sub numele de surogat scăzut .
Următoarele zone de cod sunt special concepute pentru astfel de surogate, i. H. UTF-16 caractere de înlocuire, rezervate și, prin urmare , nu conțin caractere independente:
- de la U + D800 la U + DBFF (2 10 = 1024 surogate ridicate)
- de la U + DC00 la U + DFFF (2 10 = 1024 surogate mici).
Când convertiți șiruri de caractere codate UTF-16 în secvențe de octeți UTF-8, trebuie remarcat faptul că perechile de surogate mari și mici trebuie mai întâi combinate din nou pentru a forma un cod de caractere Unicode înainte de a fi apoi convertit într-o secvență de octeți UTF-8 poate fi convertit (exemplu în descrierea pentru UTF-8 ). Deoarece acest lucru nu este adesea luat în considerare, a fost stabilită o codare diferită, incompatibilă pentru caracterele de înlocuire, care a fost ulterior standardizată ca CESU-8 .
Ordinea de octeți
În funcție de care dintre cei doi octeți ai unui cuvânt pe 16 biți este transmis sau stocat mai întâi, se vorbește despre Big Endian (UTF-16BE) sau Little Endian (UTF-16LE). Indiferent de acest lucru, cuvântul surogat înalt vine întotdeauna înainte de cuvântul surogat scăzut .
Pentru caracterele ASCII care sunt traduse în UTF-16, aceasta înseamnă că caracterul adăugat 0 se află în bitul cel mai semnificativ
- cu Big Endian și
- în Micul Endian .
Cu protocoale specificate inadecvate, se recomandă ca caracterul Unicode U + FEFF ( BOM , marca de ordine a octetului ) să fie un spațiu cu lățime zero și fără întrerupere de linie ( lățime zero , spațiu fără întrerupere , stând) la începutul fluxului de date pentru a seta - dacă este interpretat ca un caracter Unicode invalid U + FFFE ( nu un caracter ), aceasta înseamnă că ordinea de octeți între expeditor și receptor este diferită și octeții fiecărui cuvânt de 16 biți trebuie schimbați la receptor pentru a evalua corect fluxul de date ulterior.
Exemple
Unele exemple de codare pentru UTF-16 sunt date în tabelul următor:
caracter | Unicode | Binar Unicode | UTF-16BE binar | UTF-16BE hexadecimal |
---|---|---|---|---|
Litera y | U + 0079 | 00000000 0 1111001 | 00000000 0 1111001 | 00 79 |
Litera a | U + 00E4 | 00000000 11100100 | 00000000 11100100 | 00 E4 |
Semn euro | U + 20AC | 00100000 10101100 | 00100000 10101100 | 20 AC |
Treble Clef ? | U + 1D11E | 0000 000 1 110100 01 00011110 | 110110 00 0 0 110100 110111 01 00011110 | D8 34 DD 1E |
Ideograma CJK ? | U + 24F5C | 0000 00 10 010011 11 01 011 100 | 110110 00 01 010011 110111 11 01 011 100 | D8 53 DF 5C |
Ultimele două exemple sunt în afara BMP. Deoarece multe fonturi nu conțin încă aceste noi zone Unicode, caracterele conținute acolo nu pot fi afișate corect pe multe platforme. În schimb, este afișat un caracter de înlocuire, care servește ca substituent. În exemple, doar unul sau doi biți sunt modificați prin scăderea a 10000 hex (în exemplul prezentat în culoarea magenta) și surogatele sunt formate din biții creați în acest fel.
Exemplu de calcul al surogatelor
Toate numerele sunt date mai jos pe baza 16.
Für die Unicode-Position v
SG-Word1 = + D800 SG-Word2 = + DC00
= 64321 SG-Word1 = + D800 = D950
SG-Word2 = + DC00
= DF21
Vezi si
Dovezi individuale
- ↑ Unicode 4.0, Anexa C (PDF; 155 kB)