1. In memorie nu exista litere — exista numere
Deschizi un document nou si tastezi trei litere: Ana. Pe ecran vezi un nume. In memoria calculatorului, in acelasi moment, sunt scrise trei numere:
A -> 65 n -> 110 a -> 97
Daca schimbi fontul din Times New Roman in altul, desenul literelor se schimba complet — dar cele trei numere raman 65, 110, 97. Fontul schimba haina; codul este omul de dedesubt.
Cod (numarul caracterului) = numarul intreg prin care calculatorul retine acel caracter.
Set de caractere = tabelul care spune ce caracter corespunde fiecarui numar. Fara tabel, numerele nu inseamna nimic.
Partitura nu contine sunete; contine semne. Sunetul apare abia cand un instrumentist citeste semnul dupa o conventie invatata (cheia sol, portativul). La fel, fisierul text nu contine litere; contine numere. Litera apare abia cand programul citeste numarul dupa conventia unui set de caractere. Schimbi cheia la inceputul portativului — se schimba tot ce urmeaza, desi notele scrise pe hartie n-au fost atinse.
2. ASCII — primul tabel, cu 128 de casute
N -> 78 o -> 111 t -> 116 a -> 97
Toate patru sunt numere sub 128. Nu e o intamplare: tabelul din care provin, ASCII, are exact 128 de casute.
0 - 31 si 127 : coduri de control (nu se vad pe ecran)
9 = Tab, 10 = rand nou (LF), 13 = retur de car (CR)
32 : spatiul
33 - 47 : semne de punctuatie: ! " # ... , - . /
48 - 57 : cifrele 0 1 2 3 4 5 6 7 8 9
65 - 90 : literele mari A B C ... X Y Z
97 - 122 : literele mici a b c ... x y z
1. In fiecare zona, literele urmeaza in ordine alfabetica. Daca
A = 65, atunci B = 66, iar L, fiind a 12-a litera, are codul 65 + 11 = 76.2. Litera mica are intotdeauna codul literei mari plus 32:
A = 65, deci a = 97; N = 78, deci n = 110.
ASCII a fost facut pentru limba engleza. In cele 128 de casute nu exista ă, â, î, ș, ț. Nu exista nici é franceza, nici ü germana, nici alfabetul grec sau chirilic, nici simbolul muzical ♪. Un afis de concert scris curat romaneste nu poate fi pastrat integral in ASCII — pur si simplu nu exista numere libere pentru literele care ne trebuie.
3. Al optulea bit, paginile de cod si textul stalcit
Fisierul program-concert.txt contine titlul Recital de vioară. Pe calculatorul colegului arata corect. Pe al tau arata Recital de vioară, iar pe cel din laborator Recital de vioar?. Marimea fisierului: identica pe toate trei. Deci nimic nu s-a pierdut — doar s-a citit dupa alt tabel.
ISO-8859-1 (numit si Latin-1) — limbi din vestul Europei: franceza, germana, spaniola.
ISO-8859-2 (Latin-2) — limbi din centrul si estul Europei; contine ă, â, î, dar pentru sunetele „s" si „t" romanesti are numai variantele cu sedila, ş si ţ.
ISO-8859-16 (Latin-10) — tabelul care aduce, in sfarsit, formele corecte romanesti cu virgula dedesubt: ș si ț.
Windows-1250 si Windows-1252 — paginile folosite ani la rand de Windows in Europa centrala, respectiv de vest.
Pentru un elev de arte vizuale diferenta se vede cu ochiul liber: ş are dedesubt o codita lipita de litera (sedila), iar ș are o virgula detasata. Formele corecte in limba romana sunt cele cu virgula. Multe documente mai vechi, scrise cu pagini de cod din anii 2000, contin inca variantele cu sedila — la tipar diferenta se observa imediat pe un afis de format mare.
4. UNICODE — un singur catalog pentru toate scrierile lumii
Vrei sa scrii in acelasi document, fara sa schimbi nimic intre randuri:
Recital de vioară si violoncel (diacritice romanesti) Adagio ♪ ♭ ♯ (simboluri muzicale) Scena „Antigona" — cor: Χορός (alfabet grec) Atelier de scenografie 🎭 (pictograma)
Cu paginile de cod din atomul precedent asa ceva era imposibil: fiecare pagina avea numai 256 de casute si trebuia sa alegi o singura limba pe fisier. UNICODE rezolva exact aceasta problema.
U+: de exemplu U+0041 pentru A. Spatiul de numerotare merge de la U+0000 pana la U+10FFFF, adica peste un milion de pozitii posibile; dintre ele sunt deja atribuite peste 150.000 de caractere, acoperind peste 150 de sisteme de scriere, plus simboluri tehnice, muzicale si pictograme.
Diacriticele romanesti: ă = U+0103, â = U+00E2, î = U+00EE, ș = U+0219, ț = U+021B (majusculele: Ș = U+0218, Ț = U+021A).
Semne muzicale uzuale: ♪ = U+266A (optime), ♫ = U+266B (doua optimi legate), ♭ = U+266D (bemol), ♮ = U+266E (becar), ♯ = U+266F (diez).
Notatie muzicala propriu-zisa: 𝄞 = U+1D11E (cheia sol).
Pictograme: 🎭 = U+1F3AD (arte ale spectacolului), 🎨 = U+1F3A8 (paleta de pictor).
5. UTF-8 — cum ajunge code point-ul octeti pe disc
Salvezi in doua fisiere text, cu UTF-8, cate un singur cuvant:
Cantec -> 6 caractere, 6 octeti Cântec -> 6 caractere, 7 octeti
Acelasi numar de litere, dar al doilea fisier este cu un octet mai mare. Diferenta o face o singura litera: â.
1 octet U+0000 - U+007F literele engleze, cifrele, spatiul, punctuatia 2 octeti U+0080 - U+07FF ă â î ș ț, alfabetul grec, cel chirilic 3 octeti U+0800 - U+FFFF ♪ ♫ ♭ ♯ si majoritatea simbolurilor 4 octeti U+10000 - U+10FFFF 𝄞 (cheia sol), pictogramele 🎭 🎨
Cand o platforma iti spune ca descrierea unui eveniment „poate avea maximum 100 de caractere", ea poate numara de fapt octeti. Un titlu de 100 de caractere scris cu diacritice poate depasi limita, pentru ca fiecare ă sau ș consuma doi octeti, iar o pictograma consuma patru. Acelasi lucru explica de ce un subtitrare .srt cu diacritice este ceva mai mare decat aceeasi subtitrare fara ele.
UNICODE mai poate fi scris si prin UTF-16 (2 sau 4 octeti pentru fiecare caracter) sau UTF-32 (intotdeauna 4 octeti, simplu de prelucrat, dar risipitor). Catalogul este acelasi; se schimba doar ambalajul. Pentru documente si pentru web, alegerea implicita corecta ramane UTF-8.
6. In practica: salvare si inserare in Writer si in Word
Ai scris programul spectacolului intr-un document si tipografia iti cere continutul ca fisier .txt, ca sa il importe in macheta afisului. Daca salvezi la intamplare, ș si ț pot ajunge acolo semne de intrebare. Doua clicuri in dialogul de salvare rezolva definitiv problema.
Fisier > Salvare ca... (File > Save As), alegi tipul Text (.txt) si apesi Salvare. Se deschide o caseta suplimentara, Optiuni filtru ASCII (ASCII Filter Options), unde exista campul Set de caractere (Character set). Alegi acolo Unicode (UTF-8) si confirmi.
Fisier > Salvare ca, tipul Text simplu (*.txt). Word deschide o caseta cu alt nume, Conversie fisier (File Conversion), in care alegi optiunea Alta codificare (Other encoding) si selectezi din lista Unicode (UTF-8). Diferenta fata de Writer este doar numele casetei si faptul ca la Word trebuie sa alegi intai „alta codificare" pentru a debloca lista.
LibreOffice Writer: Inserare > Caracter special... (Insert > Special Character) deschide o fereastra cu toate caracterele si cu un camp de cautare. Varianta rapida: scrii in text codul hexazecimal, de exemplu 266A, si apesi Alt+X — codul se transforma in caracterul ♪. Apasand Alt+X inca o data, caracterul se transforma inapoi in cod, ceea ce este util cand vrei sa afli code point-ul unui semn primit de la altcineva.
Microsoft Word: Inserare > Simbol > Mai multe simboluri... (Insert > Symbol > More Symbols), unde exista campul Cod caracter si lista de la: pusa pe Unicode (hex). Scurtatura Alt+X dupa codul scris in text functioneaza si in Word, la fel ca in Writer.
Fisierele .odt (Writer) si .docx (Word) nu sunt text simplu: sunt arhive care pastreaza inauntru textul in UNICODE, impreuna cu formatarea. De aceea diacriticele nu se pierd cand dai documentul mai departe. Riscul apare la formatele de text simplu, care pastreaza doar octetii goi, fara sa spuna dupa ce tabel au fost scrisi: .txt, .csv (tabele exportate) si .srt (subtitrari). Acolo alegerea UTF-8 la salvare este obligatorie.
Continutul fisierului scrie-l cu diacritice, corect romaneste. Numele fisierului, in schimb, mai ales daca ajunge pe un site sau intr-un e-mail catre tipografie, este mai sigur fara diacritice si fara spatii: program-concert-vioara.txt in loc de Program concert vioară.txt. Sistemele prin care trece fisierul nu folosesc toate acelasi set de caractere pentru nume.
7. Recapitulare — tot ce ai invatat astazi
In memorie nu exista litere, ci numere. Setul de caractere este tabelul care spune ce litera inseamna fiecare numar. Fontul schimba doar desenul, niciodata codul.
7 biti, 128 de coduri (0-127). Spatiu = 32, cifrele 48-57, majusculele 65-90, minusculele 97-122. Litera mica = litera mare + 32. Nu contine diacritice romanesti.
Al optulea bit a adus 128 de locuri libere, pe care fiecare tara le-a umplut altfel (ISO-8859-2, ISO-8859-16, Windows-1250). Acelasi octet, alt tabel, alta litera pe ecran: asa apare textul stalcit.
Un singur catalog pentru toate scrierile: fiecare caracter are un code point unic, scris U+XXXX (ș = U+0219, ♪ = U+266A). Peste 150.000 de caractere atribuite. Code point-ul spune CARE caracter, nu cati octeti.
Transforma code point-ul in octeti, cu lungime variabila: 1 octet pentru zona ASCII, 2 pentru diacriticele romanesti, 3 pentru semnele muzicale uzuale, 4 pentru cheia sol si pictograme. Compatibil cu ASCII, implicit pe web.
La salvarea unui .txt: Writer → caseta „Optiuni filtru ASCII", camp „Set de caractere" → Unicode (UTF-8); Word → caseta „Conversie fisier" → „Alta codificare" → Unicode (UTF-8). Caracter dupa cod: cod hexazecimal + Alt+X, in ambele programe.