- Unicode atribuie un punct de cod unic fiecărui caracter și sincronizează repertoriul său cu ISO/IEC 10646.
- UTF-8, UTF-16 și UTF-32 codifică aceleași caractere și permit conversie fără pierderi.
- Proprietățile de normalizare, Bidi și UCD asigură o comparare, ordonare și randare consecventă.
- Adoptarea Unicode (de preferință UTF-8 pe web) previne corupția și facilitează internaționalizarea.
Unicode este limbajul comun pe care computerele îl folosesc atunci când manipulează text : atribuie un număr unic fiecărui caracter și simbol, din aproape orice sistem de scriere, astfel încât acesta să poată fi stocat, procesat și partajat fără probleme între platforme și țări.
Acest standard a apărut pentru a depăși limitările vechilor seturi de caractere ( setul ASCII , paginile de cod, EBCDIC etc.), care erau insuficiente sau incompatibile între ele, iar astăzi este sincronizat cu ISO/IEC 10646, menține algoritmi (cum ar fi cel bidirecțional) și definește proprietăți și reguli de normalizare astfel încât totul să funcționeze consecvent.
Ce este Unicode și de ce este atât de important?
Unicode este un standard universal și în continuă evoluție de codificare a caracterelor , care descrie fiecare caracter cu un nume, un punct de cod și un set de proprietăți (script, categorie, direcționalitate, caz etc.). Comitetul Tehnic Unicode (UTC), din cadrul Consorțiului Unicode, îl menține sincronizat cu standardul ISO/IEC 10646.
Scopul său este universalitatea, uniformitatea și unicitatea : un repertoriu larg care permite schimbul fără ambiguitate de text multilingv, cu reguli clare și reproductibile. Datorită acestui fapt, tehnologiile moderne (sisteme de operare, browsere, XML, Java, baze de date) pot combina alfabetul latin și arab, ideogramele CJK, emoji-urile și simbolurile tehnice sau muzicale în cadrul aceluiași document.
Caractere, glife și puncte de cod
În Unicode, un caracter este o unitate abstractă de informație, iar un punct de cod este identificatorul său numeric . O glifă este forma vizuală (ceea ce vedeți pe ecran), care depinde de font . Un singur caracter poate avea mai multe glife, iar uneori o glifă reprezintă mai mult de un caracter.
Notația obișnuită pentru un punct de cod este U+XXXX în hexazecimal . Exemple ilustrative din materialul analizat: „l” minuscul este U+006C, „ü” minuscul precompus este U+00FC, „é” este U+00E9, iar beta grecească: majusculă este U+0392, iar minuscula U+03B2 (în unele texte „β” este citată cu U+0392, dar codul respectiv corespunde majusculei „Β”).
Spațiul de cod Unicode are 1.114.112 poziții posibile (până la U+10FFFF) , organizate pentru a acoperi și clasifica toate sistemele de scriere și simbolurile, cu zeci de mii de atribuții efective și în creștere în fiecare versiune.
Planuri, zone și blocuri
Unicode își împarte spațiul de caractere în 17 planuri de până la 65.536 de puncte de cod fiecare . Această organizare facilitează gruparea scripturilor și simbolurilor corelate și permite găsirea rapidă a ceea ce căutați.
Planurile cele mai relevante : Planul Multilingv de Bază (BMP, planul 0) reunește aproape toate alfabetele moderne și numeroase simboluri; Planul Multilingv Suplimentar (SMP, planul 1) stochează alfabete istorice și simboluri tehnice (de exemplu, muzicale și matematice); Planul Ideografic Suplimentar (SIP, planul 2) extinde ideogramele CJK; planul 14 (SSP) include etichete speciale; iar planurile 15 și 16 sunt pentru uz privat.
Blocuri și zone : hărțile sunt subdivizate informal în zone și formal în blocuri contigue. Blocurile sunt folosite pentru a tabela și documenta caracterele, deși nu corespund întotdeauna unor grupări lingvistice semnificative.
Ideogramele CJK și proiectul Unihan
Ideogramele est-asiatice (Han) sunt unificate în Unicode cu variații stilistice în funcție de regiune , dar toate se referă la același caracter abstract. Gestionarea lor este asigurată de Grupul de Raportori Ideografici (IRG), un grup ISO/IEC JTC1/SC2/WG2 cu reprezentanți din China, Japonia, Coreea, Vietnam, Hong Kong, Macao, Singapore, SUA și altele.
Baza de date Unihan reunește informații auxiliare (lecturi, semnificații, echivalențe) esențiale pentru gestionarea acestor ideograme în diferite limbi și standarde istorice sau corporative.
Blocuri și extensii CJK principale :
- Ideograme unificate CJK (BMP, U+4E00–U+9FFF)20.992 de caractere utilizate în mod obișnuit.
- Extensia A (BMP, U+3400–U+4DBF)6.592 de ideograme mai puțin frecvente.
- Extensii B–HÎn SMP/SIP/TIP, acestea însumează zeci de mii mai multe (B: U+20000–U+2A6DF, 42.720; C: U+2A700–U+2B73F, 4.154; D: U+2B740–U+2B81F, 222; E: U+2B820–U+2CEAF, 5.762; F: U+2CEB0–U+2EBEF, 7.473; G: U+30000–U+3134F, 4.939;
- Alte blocuri CJK înruditeRadicali Kangxi (U+2F00–U+2FDF), simboluri și semne de punctuație CJK (U+3000–U+303F), compatibilitate și formate de compatibilitate, supliment la ideogramele de compatibilitate etc.
Unicode anticipează că încorporarea ideogramelor nu va avea un scop absolut și are în vedere mecanisme precum secvențele de descriere ideografică pentru a reprezenta simboluri necodificate prin descompunerea lor în componente existente (cu precauții: fără descompunere canonică sau garanții în operațiuni precum căutarea sau ordonarea).
Forme de codificare: UTF-8, UTF-16 și UTF-32
Unicode definește forme de transformare (UTF) care convertesc punctele de cod în unități de stocare, astfel încât software-ul să poată procesa eficient textul în funcție de contextul său.
UTF-8 este un format de codare cu lungime variabilă, orientat pe octeți, compatibil ASCII în intervalul U+0000–U+007F într-un singur octet. Standardul actual utilizează 1 până la 4 octeți per caracter; unele texte mai vechi menționează 1–6, dar în Unicode modern este 1–4. Este formatul dominant pe web.
UTF-16 folosește unități de 16 biți
(una sau două unități de cod per caracter) : majoritatea caracterelor BMP se încadrează într-o singură unitate; caracterele suplimentare utilizează perechi de surogate în intervalul U+D800–U+DFFF.
UTF-32 are lungime fixă: 4 octeți pe caracter, simplu, dar necesită mult spațiu; util atunci când indexarea directă a caracterelor este importantă și memoria nu este o problemă.
Cum sunt distribuiți biții în UTF-8
Formatul UTF-8 distribuie biții punctului de cod în secvențe de 1 până la 4 octeți cu anteturi recognoscibile, ceea ce evită ambiguitățile și facilitează detectarea limitelor caracterelor.
| Interval Unicode | Model de biți | Bytes |
|---|---|---|
| U+0000..U+007F | 0xxxxxx | 1 |
| U+0080..U+07FF | 110aaaaa 10xxxxxx | 2 |
| U+0800..U+FFFF | 1110zzzz 10yyyyyy 10xxxxxx | 3 |
| U+010000..U+10FFFF | 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx | 4 |
Un avantaj cheie al UTF-8 este că evită problemele legate de ordinea octeților (endianness) și permite procesarea extrem de eficientă a fluxurilor de text, pe lângă faptul că este compatibil cu versiunile anterioare ASCII.
Scheme de codificare, endianness și BOM
Pe lângă formele UTF, Unicode descrie scheme de serializare care rezolvă modul în care octeții sunt transmiși între sisteme cu endianism diferit și modul în care sunt semnalate aspecte precum ordinea octeților.
- UTF-8: endianismul nu se aplică. Poate fi transportat Marca de ordine a octetilor (BOM) ca indiciu, deși nu este obligatoriu sau recomandat în mod implicit.
- UTF-16Variante BE/LE (big/little-endian) și BOM opțional (dacă lipsește și nu este definit de protocol, se presupune big-endian).
- UTF-32Variante BE/LE cu reguli analoage; BOM este permis ca marcă de comandă.
Există, de asemenea, variante specifice , cum ar fi UTF-16BE/UTF-16LE și UTF-32BE/UTF-32LE (fără BOM prin convenție), și alte codificări de compatibilitate istorică, cum ar fi UTF-7 sau UTF-EBCDIC, pe lângă GB18030 (echivalentul chinezesc cu UTF-8 cu suport pentru chineza simplificată și tradițională).
Normalizare, compoziție și echivalențe
Multe caractere pot fi reprezentate ca precompuse sau ca secvențe de semne de bază + combinare . Exemple clasice din materialul revizuit: „Ä” precompus este U+00C4, în timp ce forma descompusă este „A” (U+0041) + diereză (U+0308). Litera vietnameză „ỗ” poate fi reprezentată ca „o” (U+006F) + semn circumflex (U+0302) + tildă (U+0303).
Unicode definește forme standardizate și două tipuri de echivalență : canonică (același conținut esențial) și compatibilitate (forme care pot părea la fel, dar au diferențe semantice). Standardizarea asigură o comparare fiabilă a șirurilor de caractere și reduce duplicarea.
Algoritm bidirecțional și caractere speciale
Pentru alfabetele de la dreapta la stânga, cum ar fi araba sau ebraica, Unicode încorporează un algoritm bidirecțional standardizat și în evoluție (Bidi) (de exemplu, reviziile din versiunea 6.3), astfel încât textele mixte cu latină și arabă sunt reprezentate în ordinea vizuală corectă.
Clase de puncte de cod care ar trebui cunoscute în funcție de materialul recepționat: caractere grafice (litere, semne, simboluri), formatare (caractere invizibile care afectează procesarea: U+2028 sfârșit de linie, U+2029 sfârșit de paragraf, U+00A0 spațiu fix), coduri de control moștenite pentru compatibilitate (intervalele U+0000–U+001F, U+007F, U+0080–U+009F), utilizare privată, poziții rezervate, substitute (U+D800–U+DFFF pentru UTF-16) și caractere non-caractere (U+FFFE, U+FFFF în fiecare plan).
Unicode, ISO/IEC 10646 și alte standarde (ASCII, ANSI, pagini de cod)
Unicode este sincronizat cu ISO/IEC 10646 (UCS) și păstrează mapările la standardele anterioare (ASCII, ISO 8859-1, ANSI Z39.64, JIS X 0208, KS X 1001, GB 2312, GB 18030, HKSCS, CNS 11643 etc.), pe lângă rezervarea spațiilor pentru uz privat de către producători.
ASCII vs. Unicode : ASCII este un set de caractere pe 7 biți cu 128 de caractere , suficient pentru limba engleză de bază, dar insuficient pentru limbile cu diacritice, ideograme sau emoji-uri . Unicode acoperă peste 140.000 de caractere și continuă să crească, cu codificare pe 8/16/32 de biți conform formatului UTF-12.
ANSI și pagini de cod : „ANSI” se referă de obicei la pagini de cod Windows pe 8 biți, limitate și reciproc incompatibile. Un computer care rulează OEM-Latin II și deschide textul în IBM EBCDIC-Cyrillic va vedea caractere incorecte. Unicode depășește această problemă cu un singur set de caractere și conversii fără pierderi între propriile forme.
Implementare pe sisteme (Windows, Solaris) și conversie
Windows utilizează intern UTF-16 pentru API-urile sale moderne și oferă funcții precum MultiByteToWideChar și WideCharToMultiByte pentru conversia între Unicode și pagini de cod (SBCS/DBCS/MBCS). Dacă ești obligat să faci conversia într-o pagină de cod, se pot produce pierderi de date dacă aceasta nu poate reprezenta toate caracterele.
Noile aplicații de pe Windows ar trebui să utilizeze UTF-16 intern și să lase conversia la nivelul marginilor (I/O, protocoale), reducând la minimum coruperea. Chiar și așa, Windows menține compatibilitatea cu paginile de cod atunci când este inevitabilă.
Conform documentației revizuite, Oracle Solaris 11 acceptă Unicode 6.0 și ISO/IEC 10646:2011 la nivel de sistem, utilizând UTF-8 ca format implicit în seturile de parametri, ceea ce elimină problemele de ordonare a octeților și păstrează în mod transparent codul ASCII.
Unicode în practică: Web, documente și programare
Pe web, este obișnuit să se servească și să se stocheze conținut în UTF-8 . În HTML, declarați „<meta charset="UTF-8">” pentru a asigura compatibilitatea și utilizați entități numerice hexadecimale atunci când este necesar (exemplu: moneda euro „€”).
În Word, puteți insera cu ușurință simboluri Unicode plasând cursorul, accesând Inserare > Simbol sau tastând codul și apăsând Alt+X; aceasta convertește valoarea în caracterul său, urmând procedurile standard. Consultați și lista de coduri Alt pentru inserarea simbolurilor de la tastatură.
În limbajele de programare : în Python 3, șirurile de caractere sunt deja Unicode; în Java și C#, puteți folosi caracterele de escape „\uXXXX”; în HTML, „&#xXXXX;”. Important este ca editarea, compilarea și transmiterea să utilizeze aceeași codificare pentru a evita erorile.
Copierea și lipirea simbolurilor funcționează dacă întregul șir este în Unicode . Dacă părți ale acestuia utilizează o codificare diferită, pot apărea semne de întrebare, pătrate sau alte simboluri ciudate.
Baza de date de caractere (UCD), proprietăți și categorii
Baza de date de caractere Unicode (UCD) publică, pentru fiecare punct de cod, numele, categoria, scriptul, proprietățile de caz, direcționalitatea și alte caracteristici . Aceste informații sunt vitale pentru ca motoarele de randare și procesarea textului să funcționeze corect.
Datorită acestor proprietăți , diferite componente și algoritmi (cum ar fi sortarea, segmentarea cuvintelor sau transformarea majuscule/minuscule) se pot comporta consecvent cu aceleași date.
Versiuni și extensii ale standardului: aspecte importante
Unicode se dezvoltă odată cu fiecare versiune , încorporând noi alfabete, simboluri și emoji-uri. Printre etapele cheie se numără versiunea 1.0 din 1991, cu 7.161 de caractere, și extinderile ulterioare care au adăugat mii de simboluri, ideograme, emoji-uri și alfabete noi.
De exemplu, în 2022 , versiunea 15.0 a adăugat 4.192 de ideograme CJK suplimentare și alte elemente, ajungând la aproximativ 149.186 de caractere.
Instrumente pentru explorarea tabelului Unicode
Există utilitare gratuite pentru căutarea și analiza caracterelor : Unibook Character Browser, SYMBL și Branah.com vă permit să interogați proprietăți, nume și blocuri de caractere, facilitând astfel găsirea rapidă a informațiilor de care au nevoie de către dezvoltatori și creatorii de conținut.
Cazuri de utilizare: formulare de adresă, internaționalizare și afaceri
Permiterea utilizatorilor de a introduce adrese în propria limbă și alfabet ajută la reducerea erorilor și la îmbunătățirea experienței utilizatorului. În plus, interoperabilitatea Unicode previne problemele de conversie între diferite sisteme, menținând integritatea textului pe întregul lanț digital.
Din acest motiv, Unicode este elementul fundamental care asigură că textul rămâne final în întreaga infrastructură digitală , de la formularele web la sistemele de baze de date și documentele tipărite, indiferent dacă se folosește „ñ”, arabă, chineză sau emoji-uri în aceeași propoziție.