UTF-8(7) Miscellaneous Information Manual UTF-8(7) NUME UTF-8 - o codificare Unicode multioctei compatibila cu ASCII DESCRIERE Setul de caractere Unicode 3.0 ocupa un spaiu de cod de 16 bii. Cea mai evidenta codificare Unicode (cunoscuta sub numele de UCS-2) consta intr-o secvena de cuvinte pe 16 bii. Astfel de iruri de caractere pot conine--ca parte a mai multor caractere pe 16 bii--octei, cum ar fi '\0' sau '/', care au o semnificaie speciala in numele fiierelor i in alte argumente ale funciilor bibliotecii C. In plus, majoritatea instrumentelor UNIX se ateapta la fiiere ASCII i nu pot citi cuvinte pe 16 bii ca fiind caractere fara modificari majore. Din aceste motive, UCS-2 nu este o codificare externa adecvata pentru Unicode in nume de fiiere, fiiere text, variabile de mediu i aa mai departe. Setul universal de caractere ISO/IEC 10646 (UCS), un superset al Unicode, ocupa un spaiu de codare i mai mare--31 bii--iar codificarea evidenta UCS-4 pentru acesta (o secvena de cuvinte pe 32 de bii) are aceleai probleme. Codificarea UTF-8 a Unicode i UCS nu are aceste probleme i reprezinta modul obinuit de utilizare a Unicode pe sistemele de operare de tip UNIX. Proprietai Codificarea UTF-8 are urmatoarele proprietai atractive: * Caracterele UCS de la 0x00000000 la 0x0000007f (caracterele US-ASCII clasice) sunt codificate pur i simplu ca octei de la 0x00 la 0x7f (compatibilitate ASCII). Acest lucru inseamna ca fiierele i irurile de caractere care conin numai caractere ASCII pe 7 bii au aceeai codificare atat sub ASCII, cat i sub UTF-8 . * Toate caracterele UCS mai mari de 0x7f sunt codificate ca o secvena de mai muli octei formata numai din octei din intervalul 0x80 pana la 0xfd, astfel incat niciun octet ASCII nu poate aparea ca parte a unui alt caracter i nu exista probleme cu, de exemplu, '\0' sau '/'. * Ordinea de sortare lexicografica a irurilor UCS-4 este pastrata. * Toate codurile UCS 2^31 posibile pot fi codificate utilizand UTF-8. * Octeii 0xc0, 0xc1, 0xfe i 0xff nu sunt niciodata utilizai in codificarea UTF-8. * Primul octet al unei secvene de mai muli octei care reprezinta un singur caracter UCS non-ASCII este intotdeauna cuprins intre 0xc2 i 0xfd i indica lungimea acestei secvene de mai muli octei. Toi ceilali octei ai unei secvene multioctet sunt in intervalul 0x80 - 0xbf. Acest lucru permite o resincronizare uoara i face ca codificarea sa fie ,,apatrida" (sa nu depinda configurarea regionala a sistemului) i rezistenta la octei lipsa. * Caracterele UCS codificate in UTF-8 pot avea o lungime de pana la ase octei; cu toate acestea, standardul Unicode nu specifica niciun caracter mai mare de 0x10ffff, astfel incat caracterele Unicode pot avea o lungime maxima de patru octei in UTF-8. Codificarea Urmatoarele secvene de octei sunt utilizate pentru a reprezenta un caracter. Secvena care trebuie utilizata depinde de numarul de cod UCS al caracterului: 0x00000000 - 0x0000007F: 0xxxxxxx 0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0x00200000 - 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 - 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Poziiile bitului xxx sunt completate cu biii numarului de cod al caracterului in reprezentare binara, cu bitul cel mai semnificativ primul (big-endian). Se poate utiliza numai cea mai scurta secvena multioctei posibila care poate reprezenta numarul de cod al caracterului. Valorile de cod UCS 0xd800-0xdfff (surogate UTF-16), precum i 0xfffe i 0xffff (non-caractere UCS) nu trebuie sa apara in fluxurile conforme cu UTF-8. In conformitate cu RFC 3629, nu ar trebui utilizat niciun punct peste U+10FFFF, care limiteaza caracterele la patru octei. Exemplu Caracterul Unicode 0xa9 = 1010 1001 (semnul de drepturi de autor) este codificat in UTF-8 sub forma 11000010 10101001 = 0xc2 0xa9 iar caracterul 0x2260 = 0010 0010 0110 0110 0000 (simbolul "nu este egal") este codificat ca: 11100010 10001001 10100000 = 0xe2 0x89 0xa0 Note de aplicare Utilizatorii trebuie sa selecteze o configurare regionala UTF-8, de exemplu cu export LANG=en_GB.UTF-8 pentru a activa suportul UTF-8 in aplicaii. Aplicaiile software care trebuie sa fie contiente de codificarea caracterelor utilizate ar trebui sa defineasca intotdeauna configuraia regionala cu, de exemplu setlocale(LC_CTYPE, "") iar programatorii pot apoi testa expresia, folosind strcmp(nl_langinfo(CODESET), "UTF-8") == 0 pentru a determina daca a fost selectata o configuraie regionala UTF-8 i daca, prin urmare, toate intrarile i ieirile standard in clar, comunicarea prin terminal, coninutul fiierelor in clar, numele fiierelor i variabilele de mediu sunt codificate in UTF-8. Programatorii obinuii cu codificarile cu un singur octet, cum ar fi US-ASCII sau ISO/IEC 8859, trebuie sa fie contieni de faptul ca doua dintre ipotezele facute pana acum nu mai sunt valabile in limbajul UTF-8. In primul rand, un singur octet nu mai corespunde neaparat unui singur caracter. In al doilea rand, deoarece emulatoarele moderne de terminale in modul UTF-8 accepta, de asemenea, caractere chinezeti, japoneze i coreene cu laime dubla, precum i caractere combinate fara spaiere, emiterea unui singur caracter nu avanseaza neaparat cursorul cu o poziie, aa cum se intampla in ASCII. Funciile de biblioteca, cum ar fi mbsrtowcs(3) i wcswidth(3) ar trebui sa fie utilizate de acum inainte pentru a numara caracterele i poziiile cursorului. Secvena ESC oficiala pentru a trece de la o schema de codificare ISO/IEC 2022 (utilizata, de exemplu, de terminalele VT100) la UTF-8 este ESC % G ("\x1b%G"). Secvena corespunzatoare de revenire de la UTF-8 la ISO 2022 este ESC % @ ("\x1b%@"). Alte secvene ISO/IEC 2022 (cum ar fi cele pentru comutarea seturilor G0 i G1) nu se aplica in modul UTF-8. Securitate Standardele Unicode i UCS prevad ca producatorii de UTF-8 trebuie sa utilizeze cea mai scurta forma posibila; de exemplu, producerea unei secvene de doi octei cu primul octet 0xc0 este neconforma. Unicode 3.1 a adaugat cerina potrivit careia programele conforme nu trebuie sa accepte formele care nu sunt cele mai scurte la intrare. Acest lucru se datoreaza unor motive de securitate: daca datele de intrare ale utilizatorului sunt verificate pentru posibile incalcari ale securitaii, un program ar putea verifica doar versiunea ASCII a "/../" sau ";" sau NUL i sa treaca cu vederea faptul ca exista multe moduri non-ASCII de a reprezenta aceste lucruri intr-o codificare UTF-8 care nu este cea mai scurta. Standarde ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9. CONSULTAI I locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 28 ianuarie 2024 UTF-8(7)