ASCII și Unicode: ce sunt și la ce folosesc

Un calculator înțelege doar numere, așa că fiecare literă pe care o vezi pe ecran este un cod. ASCII a fost primul tabel de coduri devenit standard, iar Unicode este cel pe care îl folosim astăzi ca să scriem în orice limbă. Aici vezi cum funcționează, ce coduri merită cunoscute, de ce apar uneori simboluri ciudate în locul diacriticelor și cum consulți totul în tabel.

Actualizat:

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.

Codurile pe care le vei întâlni cel mai des. Spațiul (32) se numără printre cele imprimabile chiar dacă nu se vede.
Caracter de controlZecimalHexazecimalBinar (7 biți)La ce folosește
Nul (NUL)0000000000Marchează sfârșitul unui șir în mai multe limbaje
Tabulator orizontal (TAB)9090001001Sare la următorul tabulator
Rând nou (LF)100A0001010Coboară pe rândul următor
Revenire la început de rând (CR)130D0001101Se întoarce la începutul rândului
Escape (ESC)271B0011011Începe secvențe de control
Spațiu32200100000Primul caracter imprimabil
Ștergere (DEL)1277F1111111Ș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.

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.

Cu cât te îndepărtezi mai mult de ASCII, cu atât caracterul ocupă mai mulți octeți.
CaracterPunct de codOcteți în UTF-8Octeți (hexazecimal)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 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.

  1. 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.
  2. Folosește butoanele de filtrare (Control, Cifre, Majuscule, Litere mici, Semne) ca să vezi doar un grup.
  3. 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.
  4. 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ă.