charsets(7) Miscellaneous Information Manual charsets(7) NUME charsets - standarde de seturi de caractere i internaionalizare DESCRIERE Aceasta pagina de manual ofera o prezentare generala a diferitelor standarde de seturi de caractere i a modului in care acestea erau utilizate in Linux inainte ca Unicode sa devina omniprezent. Unele dintre aceste informaii sunt inca utile pentru persoanele care lucreaza cu sisteme i documente vechi. Printre standardele discutate se numara ASCII, GB 2312, ISO/IEC 8859, JIS, KOI8-R, KS i Unicode. Accentul principal este pus pe seturile de caractere care au fost utilizate efectiv de seturile de caractere locale, nu pe nenumarate altele care ar putea fi gasite in datele din alte sisteme. ASCII ASCII (American Standard Code For Information Interchange) este setul original de caractere pe 7 bii, conceput iniial pentru limba engleza americana. Cunoscut i sub numele de US-ASCII. In prezent, este descris de standardul ISO/IEC 646:1991 IRV (International Reference Version). Diferite variante ASCII care inlocuiesc simbolul dolarului cu alte simboluri monetare i care inlocuiesc semnele de punctuaie cu caractere alfabetice non-englezeti pentru a acoperi limbile germana, franceza, spaniola i alte limbi aparute in 7 bii. Toate acestea sunt depreciate; glibc nu accepta localizari ale caror seturi de caractere nu sunt adevarate superseturi ale ASCII. Deoarece Unicode, atunci cand se utilizeaza UTF-8, este compatibil cu ASCII, textul ASCII simplu continua sa fie redat corect pe sistemele moderne care utilizeaza UTF-8. ISO/IEC 8859 ISO/IEC 8859 este o serie de 15 seturi de caractere pe 8 bii, toate avand ASCII in jumatatea lor inferioara (7 bii), caractere de control invizibile in poziiile 128-159 i 96 de caractere grafice cu laime fixa in poziiile 160-255. Dintre acestea, cea mai importanta este ISO/IEC 8859-1 (,,Alfabetul latin nr. 1" / Latin-1). Acesta a fost adoptat i susinut pe scara larga de diferite sisteme i este inlocuit treptat cu Unicode. Caracterele ISO/IEC 8859-1 sunt, de asemenea, primele 256 de caractere din Unicode. Suportul de consola pentru celelalte seturi de caractere ISO/IEC 8859 este disponibil in Linux prin intermediul utilitailor din modul utilizator (cum ar fi setfont(8)) care modifica asocierile de tastatura i tabelul grafic EGA i utilizeaza tabelul de fonturi ,,user mapping" (asocierile facute de utilizator) in controlorul de consola. Iata o scurta descriere a fiecarui set de caractere: ISO/IEC 8859-1 (Latin-1) Latin-1 acopera multe limbi europene, cum ar fi albaneza, basca, daneza, engleza, feroeza, galleza, islandeza, irlandeza, italiana, norvegiana, portugheza, spaniola i suedeza. Lipsa ligaturilor olandeza IJ/ij, franceza oe i a ghilimelelor ,,germane" a fost considerata tolerabila. ISO/IEC 8859-2 (Latin-2) Latin-2 accepta multe limbi din Europa Centrala i de Est scrise in latina, cum ar fi bosniaca, croata, ceha, germana, maghiara, poloneza, slovaca i slovena. Inlocuirea literei romaneti / cu / a fost considerata tolerabila. ISO/IEC 8859-3 (Latin-3) Latin-3 a fost conceput pentru a acoperi esperanto, malteza i turca, dar ISO/IEC 8859-9 l-a inlocuit mai tarziu pentru turca. ISO/IEC 8859-4 (Latin-4) Latin-4 a introdus litere pentru limbile nord-europene, cum ar fi estona, letona i lituaniana, dar a fost inlocuit de ISO/IEC 8859-10 i ISO/IEC 8859-13. ISO/IEC 8859-5 Litere chirilice care sunt utilizate in limba bulgara, bielorusa, macedoneana, rusa, sarba i (aproape in totalitate) ucraineana. Nu a fost niciodata folosit pe scara larga, a se vedea discuia despre KOI8-R/KOI8-U de mai jos. ISO/IEC 8859-6 A fost creat pentru limba araba. Tabelul de glife ISO/IEC 8859-6 este un font fix de forme de litere separate, dar un motor de afiare adecvat ar trebui sa le combine folosind formele iniiale, medii i finale adecvate. ISO/IEC 8859-7 A fost creat pentru greaca moderna in 1987, i actualizat in 2003. ISO/IEC 8859-8 Accepta ebraica moderna fara niqud (semne de punctuaie). Niqud i ebraica biblica in asamblu erau in afara domeniului de aplicare al acestui set de caractere. ISO/IEC 8859-9 (Latin-5) Aceasta este o varianta a Latin-1 care inlocuiete literele islandeze cu cele turceti. ISO/IEC 8859-10 (Latin-6) Latin-6 a adaugat literele Inuit (groenlandeza) i Sami (lapona), care lipseau in Latin-4, pentru a acoperi intreaga zona nordica. ISO/IEC 8859-11 Suporta alfabetul thailandez i este aproape identic cu standardul TIS-620. ISO/IEC 8859-12 Acest set de caractere nu exista. ISO/IEC 8859-13 (Latin-7) Suporta limbile din bazinul baltic; in special, include caractere letone care nu se gasesc in Latin-4. ISO/IEC 8859-14 (Latin-8) Acesta este setul de caractere celtice, care acopera limbile irlandeza veche, manxa, gaelica, galeza, galeza, cornia i bretona. ISO/IEC 8859-15 (Latin-9) Latin-9 este similar cu Latin-1, folosit pe scara larga, dar inlocuiete unele simboluri mai puin obinuite cu semnul euro i literele franceze i finlandeze care lipseau in Latin-1. ISO/IEC 8859-16 (Latin-10) Acest set acopera mai multe limbi din sud-estul Europei i, cel mai important, asigura un suport mai complet pentru limba romana decat Latin-2. KOI8-R / KOI8-U KOI8-R este un set de caractere non-ISO popular in Rusia inainte de Unicode. Jumatatea inferioara este ASCII, iar cea superioara este un set de caractere chirilice ceva mai bine conceput decat ISO/IEC 8859-5. KOI8-U, bazat pe KOI8-R, are un suport mai bun pentru ucraineana. Nici unul dintre aceste seturi nu este compatibil cu ISO/IEC 2022, spre deosebire de seria ISO/IEC 8859. Suportul de consola pentru KOI8-R este disponibil in Linux prin intermediul utilitailor in modul utilizator care modifica asocierile de tastatura i tabelul grafic EGA i utilizeaza tabelul de fonturi ,,user mapping" (asocierile facute de utilizator) in controlorul de consola. GB 2312 GB 2312 este un set de caractere standard naional din China continentala utilizat pentru a exprima chineza simplificata. La fel ca in cazul JIS X 0208, caracterele sunt transpuse intr-o matrice de doi octei de 94x94 utilizata pentru a construi EUC-CN. EUC-CN este cea mai importanta codificare pentru Linux i include ASCII i GB 2312. Reinei ca EUC-CN este adesea numit GB, GB 2312 sau CN-GB. Big5 Big5 a fost un set de caractere popular in Taiwan pentru a exprima chineza tradiionala (Big5 este atat un set de caractere, cat i o codificare) Este un superset al ASCII. Caracterele non-ASCII sunt exprimate in doi octei. Octeii 0xa1-0xfe sunt utilizai ca octei de inceput pentru caracterele de doi octei. Big5 i extensia sa au fost utilizate pe scara larga in Taiwan i Hong Kong. Nu este compatibil cu ISO/IEC 2022. JIS X 0208 JIS X 0208 este un set de caractere standard naional japonez. Dei exista mai multe seturi de caractere standard naionale japoneze (cum ar fi JIS X 0201, JIS X 0212 i JIS X 0213), acesta este cel mai important. Caracterele sunt transpuse intr-o matrice 94x94 de doi octei, fiecare octet fiind cuprins in intervalul 0x21-0x7e. Reinei ca JIS X 0208 este un set de caractere, nu o codificare. Aceasta inseamna ca JIS X 0208 nu este utilizat pentru a exprima date text. JIS X 0208 este utilizat ca o componenta pentru a construi codificari precum EUC-JP, Shift_JIS i ISO/IEC 2022-JP. EUC-JP este cea mai importanta codificare pentru Linux i include ASCII i JIS X 0208. In EUC-JP, caracterele JIS X 0208 sunt exprimate in doi octei, fiecare dintre acetia fiind codul JIS X 0208 plus 0x80. KS X 1001 KS X 1001 este un set de caractere standard naional coreean. La fel ca i in JIS X 0208, caracterele sunt transpuse intr-o matrice de doi octei de 94x94. KS X 1001 este utilizat, ca i JIS X 0208, ca o componenta pentru a construi codificari precum EUC-KR, Johab i ISO/IEC 2022-KR. EUC-KR este cea mai importanta codificare pentru Linux i include ASCII i KS X 1001. KS C 5601 este un nume mai vechi pentru KS X 1001. ISO/IEC 2022 i ISO/IEC 4873 Standardele ISO/IEC 2022 i ISO/IEC 4873 descriu un model de control al fonturilor bazat pe practica VT100. Acest model este (parial) acceptat de nucleul Linux i de xterm(1). Au fost definite mai multe codificari de caractere bazate pe ISO/IEC 2022, in special pentru japoneza. Exista 4 seturi de caractere grafice, denumite G0, G1, G2 i G3, iar unul dintre acestea este setul de caractere curent pentru codurile cu bitul mare zero (iniial G0) i unul dintre ele este setul de caractere curent pentru codurile cu bitul mare unu (iniial G1). Fiecare set de caractere grafice are 94 sau 96 de caractere i este, in esena, un set de caractere pe 7 bii. Acesta utilizeaza codurile 040-0177 (041-0176) sau 0240-0377 (0241-0376). G0 are intotdeauna dimensiunea 94 i utilizeaza codurile 041-0176. Trecerea de la un set de caractere la altul se face cu ajutorul funciilor de deplasare ^N (SO sau LS1), ^O (SI sau LS0), ESC n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R), ESC } (LS2R), ESC | (LS3R). Funcia LSn face ca setul de caractere Gn sa fie cel curent pentru codurile cu bitul mare zero. Funcia LSnR face ca setul de caractere Gn sa fie cel curent pentru codurile cu bitul 1 mare. Funcia SSn face ca setul de caractere Gn (n=2 sau 3) sa fie cel curent numai pentru urmatorul caracter (indiferent de valoarea bitului de ordin inalt al acestuia). Un set de 94 de caractere este desemnat ca set de caractere Gn printr-o secvena de eludare ESC ( xx (pentru G0), ESC ) xx (pentru G1), ESC * xx (pentru G2), ESC + xx (pentru G3), unde xx este un simbol sau o pereche de simboluri din Registrul internaional al seturilor de caractere codificate ISO/IEC 2375. De exemplu, ESC ( @ selecteaza setul de caractere ISO/IEC 646 ca G0, ESC ( A selecteaza setul de caractere standard din Marea Britanie (cu lira sterlina in loc de simbolul monetar), ESC ( B selecteaza ASCII (cu dolarul in loc de simbolul monetar), ESC ( M selecteaza un set de caractere pentru limbile africane, ESC ( ! A selecteaza setul de caractere cubanez, i aa mai departe. Un set de 96 de caractere este desemnat ca set de caractere Gn printr-o secvena de eludare ESC - xx (pentru G1), ESC . xx (pentru G2) sau ESC / xx (pentru G3). De exemplu, ESC - G selecteaza alfabetul ebraic ca fiind G1. Un set de caractere multioctei este desemnat ca set de caractere Gn printr-o secvena de eludare ESC $ xx sau ESC $ ( xx (pentru G0), ESC $ ) xx (pentru G1), ESC $ * xx (pentru G2), ESC $ + xx (pentru G3). De exemplu, ESC $ ( C selecteaza setul de caractere coreene pentru G0. Setul de caractere japoneze selectat prin ESC $ B are o versiune mai recenta selectata prin ESC & @ ESC $ B. ISO/IEC 4873 stipuleaza o utilizare mai restransa a seturilor de caractere, in care G0 este fix (intotdeauna ASCII), astfel incat G1, G2 i G3 pot fi invocate numai pentru codurile cu bitul de ordin inalt activat. In special, ^N i ^O nu mai sunt utilizate, ESC ( xx poate fi utilizat numai cu xx=B, iar ESC ) xx, ESC * xx, ESC + xx sunt echivalente cu ESC - xx, ESC . xx, ESC / xx, respectiv ESC / xx. TIS-620 TIS-620 este un set de caractere standard naional thailandez i un superset al ASCII. In acelai mod ca i in cazul seriei ISO/IEC 8859, caracterele thailandeze sunt transpuse in intervalul 0xa1-0xfe. Unicode Unicode (ISO/IEC 10646) este un standard care are ca scop reprezentarea fara ambiguitate a fiecarui caracter din fiecare limba umana. Structura Unicode permite codificarea fiecarui caracter pe 20,1 bii. Deoarece majoritatea calculatoarelor nu includ numere intregi pe 20,1 bii, Unicode este de obicei codificat ca numere intregi pe 32 de bii la nivel intern i fie ca o serie de numere intregi pe 16 bii (UTF-16) (avand nevoie de doua serii de numere intregi pe 16 bii doar la codificarea anumitor caractere rare), fie ca o serie de octei pe 8 bii (UTF-8). Linux reprezinta Unicode utilizand formatul de transformare Unicode pe 8 bii (UTF-8). UTF-8 este o codificare cu lungime variabila a Unicode. Acesta utilizeaza 1 octet pentru a codifica 7 bii, 2 octei pentru 11 bii, 3 octei pentru 16 bii, 4 octei pentru 21 de bii, 5 octei pentru 26 de bii, 6 octei pentru 31 de bii. Fie ca 0,1,x reprezinta un zero, unu sau un bit arbitrar. Un octet 0xxxxxxx reprezinta Unicode 00000000 0xxxxxxx, care codifica acelai simbol ca i ASCII 0xxxxxxx. Astfel, ASCII ramane neschimbat in UTF-8, iar persoanele care folosesc doar ASCII nu observa nicio schimbare: nici in cod, nici in dimensiunea fiierului. Un octet 110xxxxx este inceputul unui cod de 2 octei, iar 110xxxxx 10yyyyyyyy este asamblat in 00000xxx xxyyyyyyy. Un octet 1110xxxx reprezinta inceputul unui cod de 3 octei, iar 1110xxxx 10yyyyyyyyyy 10zzzzzzzz este asamblat in xxxxyyyyyy yyzzzzzzzzzz. (Atunci cand se utilizeaza UTF-8 pentru a codifica ISO/IEC 10646 pe 31 de bii, aceasta progresie continua pana la coduri de 6 octei). Pentru majoritatea textelor din seturile de caractere ISO 8859, acest lucru inseamna ca toate caracterele din afara ASCII sunt acum codificate cu doi octei. Acest lucru tinde sa extinda fiierele de text obinuite cu doar unul sau doua procente. In cazul textelor in rusa sau greaca, fiierele de text obinuite se maresc cu 100%, deoarece textele din aceste limbi sunt in mare parte in afara ASCII. Pentru utilizatorii japonezi, acest lucru inseamna ca codurile pe 16 bii utilizate in prezent in mod obinuit vor necesita trei octei. Dei exista conversii algoritmice de la unele seturi de caractere (in special ISO/IEC 8859-1) la Unicode, conversia generala necesita utilizarea unor tabele de conversie, care pot fi destul de mari pentru codurile pe 16 bii. Reinei ca UTF-8 se autosincronizeaza: 10xxxxxx este o coada, orice alt octet este capul unui cod. Reinei ca singurul mod in care apar octei ASCII intr-un flux UTF-8 este ca atare. In special, nu exista NUL-uri incorporate ('\0') sau '/'s care fac parte dintr-un cod mai mare. Deoarece ASCII i, in special, NUL i '/', sunt neschimbate, nucleul nu observa ca se utilizeaza UTF-8. Nu-i pasa deloc ce reprezinta octeii pe care ii manipuleaza. Redarea fluxurilor de date Unicode este de obicei gestionata prin intermediul tabelelor de "subfonturi" care transpun un subset de Unicode in glife. La nivel intern, nucleul utilizeaza Unicode pentru a descrie subfontul incarcat in memoria RAM video. Acest lucru inseamna ca in consola Linux in modul UTF-8 se poate utiliza un set de caractere cu 512 simboluri diferite. Acest lucru nu este suficient pentru japoneza, chineza i coreeana, dar este suficient pentru majoritatea celorlalte scopuri. CONSULTAI I iconv(1), ascii(7), iso_8859-1(7), unicode(7), utf-8(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 charsets(7)