Ce este o codificare de caractere
O codificare este o înțelegere: „numărul 65 înseamnă litera A”. Când scrii un text, programul salvează acele numere; când îl deschide altcineva, programul lui le traduce la loc în litere, folosind aceeași înțelegere. Dacă cei doi nu folosesc același tabel, textul iese greșit.
Trebuie separate două idei. Una este setul de caractere, lista cu ce numere corespund căror simboluri. Cealaltă este felul în care acele numere se stochează în octeți. În ASCII cele două coincid în mod trivial; în Unicode nu, și aici intervine UTF-8.
ASCII: 128 de caractere pe 7 biți
ASCII (de la American Standard Code for Information Interchange) a fost standardizat în anii 1960. Folosește 7 biți, adică 2 la puterea 7 = 128 de coduri, de la 0 la 127. Dintre ele, 33 sunt caractere de control (de la 0 la 31 și 127), iar 95 sunt imprimabile (de la 32 la 126, inclusiv spațiul).
Nu include litere cu diacritice, nici ñ, nici simbolul euro: a fost conceput pentru engleză. Asta explică de ce au fost necesare mai târziu alte tabele.
| Caracter de control | Zecimal | Hexazecimal | Binar (7 biți) | La ce folosește |
|---|---|---|---|---|
| Nul (NUL) | 0 | 00 | 0000000 | Marchează sfârșitul unui șir în mai multe limbaje |
| Tabulator orizontal (TAB) | 9 | 09 | 0001001 | Sare la următorul tabulator |
| Rând nou (LF) | 10 | 0A | 0001010 | Coboară pe rândul următor |
| Revenire la început de rând (CR) | 13 | 0D | 0001101 | Se întoarce la începutul rândului |
| Escape (ESC) | 27 | 1B | 0011011 | Începe secvențe de control |
| Spațiu | 32 | 20 | 0100000 | Primul caracter imprimabil |
| Ștergere (DEL) | 127 | 7F | 1111111 | Șterge caracterul |
Relații care merită ținute minte
Tabelul nu este ordonat la întâmplare. Cu câteva regularități poți citi coduri din memorie.
- Cifrele de la „0” la „9” ocupă de la 48 la 57 (30 la 39 în hexazecimal). Valoarea unei cifre este codul ei minus 48: „7” este 55, iar 55 − 48 = 7.
- Majusculele merg de la 65 („A”) la 90 („Z”), iar literele mici de la 97 („a”) la 122 („z”).
- Diferența dintre o majusculă și litera ei mică este mereu 32: „A” = 65 și „a” = 97; „C” = 67 și „c” = 99. În binar se schimbă un singur bit: 01000001 pentru „A” și 01100001 pentru „a”.
- Ca să afli ce loc ocupă o majusculă în alfabet, scade 64: „C” este 67 și 67 − 64 = 3, a treia literă.
- Cum toate majusculele (65 la 90) au coduri mai mici decât literele mici (97 la 122), o ordonare alfabetică „după cod” pune „Zebra” înaintea lui „apple”. Multe programe au nevoie de o opțiune de comparare separată ca să ordoneze corect.
Sfârșit de rând: LF, CR și CRLF
Un rând nou pare ceva simplu, dar se scrie diferit în funcție de sistem. Unix, Linux și macOS folosesc un singur caracter, LF (10). Windows folosește două la rând, CR și LF (13 și 10), cunoscute ca CRLF. Vechile teleimprimante aveau nevoie de două comenzi diferite: întoarcerea carului la început și avansarea hârtiei cu un rând.
Această diferență este cauza fișierelor care apar totul pe un singur rând într-un editor simplu sau cu un simbol ciudat la capătul fiecărui rând. Dacă vrei să afli ce cod are fiecare, scrie LF sau CR în căutarea din tabelul ASCII.
„ASCII extins” nu este un standard
Cum un octet are 8 biți, iar ASCII folosește doar 7, rămâneau 128 de coduri libere (de la 128 la 255), iar fiecare producător și fiecare regiune le-a umplut în felul său. Asta se numește „ASCII extins”, dar nu există un singur tabel: sunt multe, numite pagini de cod. Două dintre cele mai cunoscute sunt Latin-1 (ISO-8859-1), în care é este codul 233, și Windows-1252, asemănătoare, dar cu diferențe la codurile 128 până la 159 (acolo se află, de exemplu, euro).
Problema este că codul 233 înseamnă „é” într-un tabel și altceva în altul. Un text scris cu un tabel și citit cu altul arăta ca un amestec de simboluri fără sens. Unicode a apărut ca să pună capăt acestei dezordini.
Unicode și UTF-8
Unicode atribuie un număr unic, numit punct de cod, fiecărui caracter din aproape toate sistemele de scriere ale lumii, plus simboluri și emoji-uri. Astăzi are peste 150.000 de caractere. Se scrie cu prefixul U+ și în hexazecimal: „A” este U+0041, „ñ” este U+00F1, euro este U+20AC, iar emoji-ul cu fața zâmbitoare este U+1F600. Primele 128 de puncte de cod sunt exact cele din ASCII.
UTF-8 este cea mai folosită formă de a stoca acele numere în octeți și folosește între 1 și 4, după caracter. Cele 128 din ASCII ocupă un singur octet, identic cu cel de dintotdeauna, așa că un text ASCII este și un text UTF-8 valid. Restul ocupă mai mulți octeți.
| Caracter | Punct de cod | Octeți în UTF-8 | Octeți (hexazecimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
De ce apare „ñ” în loc de „ñ”
Este cea mai frecventă eroare și are o explicație exactă. ñ în UTF-8 înseamnă doi octeți: C3 și B1. Dacă un program crede că textul este în Latin-1, citește fiecare octet ca pe un caracter: C3 este „Ô, iar B1 este „±”. Rezultat: „ñ”. Se întâmplă la fel cu „é”, care apare ca „é”, și cu „canción”, care apare ca „canción”.
Soluția este aproape întotdeauna să-i spui programului să deschidă fișierul ca UTF-8 (într-un editor de text sau în setările de import ale unui program de foi de calcul). Când se întâmplă invers, text în Latin-1 citit ca UTF-8, apar de obicei romburi cu semn de întrebare, pentru că acei octeți izolați nu formează secvențe UTF-8 valide.
Cum folosești tabelul ASCII și convertorul
Instrumentul „Tabel ASCII” arată cele 128 de caractere cu codul lor în zecimal, hexazecimal, octal și binar, precum și numele celor de control.
- Scrie în căutare un caracter, un cod sau numele unui caracter de control (de exemplu A, 65, 41 sau LF) ca să-i găsești rândul.
- Folosește butoanele de filtrare (Control, Cifre, Majuscule, Litere mici, Semne) ca să vezi doar un grup.
- Pentru conversie, scrie un text în „Text” și alege formatul (zecimal, hexazecimal, octal sau binar): dedesubt apar codurile. „Hola” dă 72 111 108 97 în zecimal și 48 6F 6C 61 în hexazecimal.
- Poți face și invers: lipește coduri separate prin spații sau virgule în „Coduri” și se formează textul. În hexazecimal se acceptă prefixe precum 0x41.
Dacă textul are caractere care nu sunt ASCII, cum este ñ, instrumentul te avertizează și arată codul lor Unicode. Ca să vezi octeții reali în UTF-8, folosește „Text în binar”: ñ dă 11000011 10110001, doi octeți de câte 8 biți. Limitele: tabelul arată doar ASCII standard, nu cel extins, iar totul se calculează în browserul tău, fără să trimită textul către vreun server.
Întrebări frecvente
Câte caractere are ASCII?
128, cu coduri de la 0 la 127 și câte 7 biți fiecare. Dintre ele, 33 sunt de control și 95 sunt imprimabile, numărând și spațiul.
Care este codul ASCII al literei A și al literei a?
„A” este 65 (41 în hexazecimal, 01000001 în binar), iar „a” este 97 (61 în hexazecimal, 01100001 în binar). Diferă mereu cu 32.
Care este diferența dintre ASCII și Unicode?
ASCII are 128 de caractere gândite pentru engleză. Unicode are peste 150.000, din aproape toate limbile, plus emoji-uri, iar primele lui 128 sunt aceleași cu cele din ASCII.
Ce este UTF-8?
Este cea mai folosită formă de a stoca text Unicode în octeți. Folosește de la 1 la 4 octeți pe caracter: cele din ASCII ocupă unul, un ñ ocupă doi, iar un emoji patru.
De ce textul meu arată „Ã±” sau „é”?
Pentru că un text salvat în UTF-8 este citit ca Latin-1. Deschide fișierul indicând codificarea UTF-8 și se rezolvă.