unicode(7)

NUME
unicode - set de caractere universal

DESCRIERE
Standardul internațional ISO/IEC 10646 definește setul universal de caractere („Universal Character Set”: UCS). UCS conține toate caracterele din toate celelalte standarde de seturi de caractere. De asemenea, garantează „compatibilitatea dus-întors”; cu alte cuvinte, tabelele de conversie pot fi construite astfel încât să nu se piardă nicio informație atunci când un șir de caractere este convertit din orice altă codificare în UCS și invers.

UCS conține caracterele necesare pentru a reprezenta practic toate limbile cunoscute. Acestea includ nu numai caracterele latine, grecești, chirilice, ebraice, arabe, armenești și georgiene, ci și ideogramele chinezești, japoneze și coreene Han, precum și caractere precum Hiragana, Katakana, Hangul, Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayalam, Thai, Lao, Khmer, Bopomofo, Tibetană, Runic, Etiopiană, Silabică canadiană, Cherokee, Mongolă, Ogham, Myanmar, Sinhala, Thaana, Yi și altele. În ceea ce privește scripturile care nu sunt încă acoperite, cercetările privind cea mai bună codificare a acestora pentru utilizarea pe calculator sunt încă în curs de desfășurare și vor fi adăugate în cele din urmă. Acestea ar putea include în cele din urmă nu numai hieroglife și diverse limbi indo-europene istorice, ci chiar și unele scripturi artistice selectate, cum ar fi Tengwar, Cirth și Klingon. UCS acoperă, de asemenea, un număr mare de simboluri grafice, tipografice, matematice și științifice, inclusiv cele furnizate de TeX, Postscript, APL, MS-DOS, MS-Windows, Macintosh, fonturi OCR, precum și de multe sisteme de procesare a textelor și de publicare, iar altele sunt în curs de adăugare.

Standardul UCS (ISO/IEC 10646) descrie o arhitectură a setului de caractere pe 31 de biți care constă din 128 de grupuri pe 24 de biți, fiecare fiind împărțit în 256 de planuri pe 16 biți, alcătuite din 256 de rânduri pe 8 biți cu 256 de poziții coloană, una pentru fiecare caracter. Partea 1 a standardului (ISO/IEC 10646-1) definește primele 65534 de poziții de cod (de la 0x0000 la 0xfffd), care formează Planul multilingvistic de bază („Basic Multilingual Plane”: BMP), adică planul 0 din grupul 0. Partea 2 a standardului (ISO/IEC 10646-2) adaugă caractere la grupul 0 în afară de BMP în mai multe planuri suplimentare în intervalul 0x10000 - 0x10ffff. Nu există planuri de adăugare a caracterelor dincolo de 0x10ffff la standard, prin urmare, din întregul spațiu de cod, doar o mică parte din grupul 0 va fi utilizată în viitorul apropiat. BMP conține toate caracterele care se găsesc în celelalte seturi de caractere utilizate în mod obișnuit. Planurile suplimentare adăugate de ISO/IEC 10646-2 acoperă doar caracterele mai exotice pentru nevoi speciale în domeniul științific, al imprimării dicționarelor, al industriei editoriale, al protocoalelor de nivel superior și al entuziaștilor.

Reprezentarea fiecărui caracter UCS sub forma unui cuvânt de 2 octeți se numește forma UCS-2 (numai pentru caracterele BMP), în timp ce UCS-4 este reprezentarea fiecărui caracter sub forma unui cuvânt de 4 octeți. În plus, există două forme de codificare: UTF-8 pentru compatibilitatea cu programele de procesare ASCII și UTF-16 pentru gestionarea retro-compatibilă a caracterelor non-BMP până la 0x10ffff de către programele UCS-2.

Caracterele UCS de la 0x0000 la 0x007f sunt identice cu cele din setul clasic de caractere US-ASCII, iar caracterele din intervalul de la 0x0000 la 0x00ff sunt identice cu cele din ISO 8859-1 (Latin-1).

  Combinarea caracterelor
Unele puncte de cod din UCS au fost atribuite pentru caractere de combinare. Acestea sunt similare cu tastele de accent fără spațiere de pe o mașină de scris. O combinație de caractere nu face decât să adauge un accent la caracterul anterior. Cele mai importante caractere accentuate au coduri proprii în UCS, însă mecanismul de combinare a caracterelor ne permite să adăugăm accente și alte semne diacritice la orice caracter. Un caracter de combinare nu face decât să adauge un accent la caracterul anterior. Cele mai importante caractere accentuate au coduri proprii în UCS, însă mecanismul de combinare a caracterelor ne permite să adăugăm accente și alte semne diacritice la orice caracter. Caracterele de combinare urmează întotdeauna caracterul pe care îl modifică. De exemplu, caracterul german Umlaut-A („Litera majusculă latină A cu diereză”) poate fi reprezentat fie prin codul UCS precompus 0x00c4, fie ca o combinație de „Litera majusculă latină A” normală urmată de o „diereză combinatorie”: 0x0041 0x0308.

Combinarea caracterelor este esențială, de exemplu, pentru codificarea scriptului thailandez sau pentru compunerea matematică și utilizatorii alfabetului fonetic internațional.

  Niveluri de implementare
Deoarece nu se așteaptă ca toate sistemele să accepte mecanisme avansate, cum ar fi combinarea caracterelor, ISO/IEC 10646-1 specifică următoarele trei niveluri de implementare ale UCS:

Nivelul 1
    Caracterele combinate și Hangul Jamo (o variantă de codificare a alfabetului coreean, în care o pictogramă de silabă Hangul este codificată ca un triplet sau o pereche de coduri de vocale/consonante) nu sunt acceptate.

Nivelul 2
    În plus față de nivelul 1, acum sunt permise combinații de caractere pentru unele limbi în care acestea sunt esențiale (de exemplu, thailandeză, lao, ebraică, arabă, devanagari, malaieziană).

Nivelul 3
    Sunt acceptate toate caracterele UCS.

Standardul Unicode 3.0 publicat de Consorțiul Unicode conține exact planul multilingvistic de bază UCS la nivelul de implementare 3, așa cum este descris în ISO/IEC 10646-1:2000. Unicode 3.1 a adăugat planurile suplimentare din ISO/IEC 10646-2. Standardul Unicode și rapoartele tehnice publicate de Consorțiul Unicode oferă numeroase informații suplimentare privind semantica și utilizările recomandate pentru diverse caractere. Acestea oferă orientări și algoritmi pentru editarea, sortarea, compararea, normalizarea, conversia și afișarea șirurilor Unicode.

  Unicode în Linux
În GNU/Linux, tipul C wchar_t este un tip de număr întreg cu semn (+/-) pe 32 de biți. Valorile sale sunt întotdeauna interpretate de biblioteca C ca valori de cod UCS (în toate localizările), convenție care este semnalată de biblioteca C GNU C aplicațiilor prin definirea constantei __STDC_ISO_10646__ așa cum este specificată în standardul ISO C99.

UCS/Unicode poate fi utilizat la fel ca ASCII în fluxurile de intrare/ieșire, în comunicarea prin terminal, în fișierele de text simplu, în numele fișierelor și în variabilele de mediu în codificarea multiocteți UTF-8 compatibilă cu ASCII. Pentru a semnala tuturor aplicațiilor utilizarea UTF-8 ca codificare a caracterelor, trebuie să se selecteze o configurare regională adecvată (locale) prin intermediul variabilelor de mediu (de exemplu, „LANG=en_GB.UTF-8”).

Funcția nl_langinfo(CODESET) returnează numele codificării selectate. Funcțiile de bibliotecă, cum ar fi wctomb(3) și mbsrtowcs(3), pot fi utilizate pentru a transforma caracterele și șirurile interne wchar_t în codificarea caracterelor de sistem și invers, iar wcwidth(3) informează cu câte poziții (0–2) este avansat cursorul prin ieșirea unui caracter.

  Zone de utilizare privată („Private Use Areas”: PUA)
În planul multilingvistic de bază, intervalul de la 0xe000 la 0xf8ff nu va fi niciodată atribuit niciunui caracter de către standard și este rezervat pentru uz privat. Pentru comunitatea Linux, această zonă privată a fost subdivizată în continuare în intervalul 0xe000 - 0xefff, care poate fi utilizat individual de orice utilizator final, și în zona Linux din intervalul 0xf000 - 0xf8ff, unde extensiile sunt coordonate între toți utilizatorii Linux. Registrul caracterelor atribuite zonei Linux este menținut de LANANA, iar registrul propriu-zis este Documentation/admin-guide/unicode.rst în sursele nucleului Linux (sau Documentation/unicode.txt înainte de Linux 4.10).

Alte două planuri sunt rezervate pentru uz privat, planul 15 (Zona suplimentară de utilizare privată-A, intervalul de la 0xf0000 la 0xffffd) și planul 16 (Zona suplimentară de utilizare privată-B, intervalul de la 0x100000 la 0x10fffd).

  Literatură

•   Tehnologia informației — Set universal de caractere codificate cu octeți multipli (UCS) — Partea 1: Arhitectura și planul multilingvistic de bază. Standardul internațional ISO/IEC 10646-1, Organizația Internațională pentru Standardizare, Geneva, 2000.

    Aceasta este specificația oficială a UCS. Disponibilă la http://www.iso.ch/.

•   Standardul Unicode, versiunea 3.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.

•   S. Harbison, G. Steele. C: Un manual de referință. A patra ediție, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.

    O bună carte de referință despre limbajul de programare C. Cea de-a patra ediție acoperă amendamentul 1 din 1994 la standardul ISO C90, care adaugă un număr mare de noi funcții de bibliotecă C pentru gestionarea codurilor de caractere late și multioctet, dar nu acoperă încă ISO C99, care a îmbunătățit și mai mult suportul pentru caracterele late și multioctet.

•   Rapoarte tehnice Unicode.
    http://www.unicode.org/reports/

•   Markus Kuhn: UTF-8 și Unicode FAQ pentru UNIX/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html

•   Bruno Haible: Unicode HOWTO.
    http://www.tldp.org/HOWTO/Unicode-HOWTO.html

CONSULTAȚI ȘI
locale(1), setlocale(3), charsets(7), utf-8(7)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.