CodeGym /Corsi /C# SELF /Che cos'è la codifica e perché serve

Che cos'è la codifica e perché serve

C# SELF
Livello 37 , Lezione 0
Disponibile

1. Introduzione

Immagina di essere un diplomatico a un vertice internazionale: ognuno parla la sua lingua e usa la sua scrittura. Per capirsi serve un traduttore universale — un insieme di regole condivise per mappare i simboli. Nei computer questo ruolo è svolto dalle codifiche.

Il computer capisce un unico "linguaggio": sequenze di zero e uno. 0 e 1 sono il suo "alfabeto". Tutte le informazioni sono memorizzate e trasmesse come byte. Un byte è 8 bit (per esempio, 01000001).

Come colleghiamo le nostre lettere e i nostri segni ai byte? Come fa il computer a capire che la lettera «А» non è solo una sequenza di 0/1, ma proprio quel simbolo sullo schermo?

Codifica

La codifica è un insieme di regole (una tabella di corrispondenza) che definisce come ogni carattere (lettera, cifra, segno, geroglifico, emoji) viene trasformato in una sequenza di byte e come poi quei byte vengono interpretati di nuovo come caratteri.

L'analogia è l'alfabeto Morse: traduci il testo in punti e linee, invii il messaggio e il ricevente, seguendo le stesse regole, ricostruisce i simboli. Nel computer la convenzione "byte ↔ caratteri" è la codifica.

2. Perché ci serve tutta questa rogna con le codifiche?

  • Traduzione tra il mondo umano e quello macchina: senza codifica il testo è solo una sequenza di byte; con la codifica ha senso come caratteri.
  • Universalità e compatibilità: diversi programmi e sistemi operativi devono "mettersi d'accordo" sulle regole. Se un file è dichiarato come UTF-8, va letto come UTF-8.
  • Supporto per molte lingue e simboli: cirillico, scritture arabe, ideogrammi, simboli matematici, emoji — più ampio è il set di caratteri, più complessa e flessibile deve essere la codifica.

3. ASCII – la codifica "primitiva"

Una delle codifiche più antiche e basilari è ASCII (American Standard Code for Information Interchange). Usa 7 bit per carattere, quindi può rappresentare 128 simboli diversi: l'alfabeto latino (A-Z, a-z), cifre (0-9), punteggiatura e codici di controllo (per es. newline, tab).

Simbolo Codice decimale (ASCII) Codice binario (7 bit)
A
65
1000001
B
66
1000010
a
97
1100001
b
98
1100010
0
48
0110000
1
49
0110001
!
33
0100001
Spazio
32
0100000

Storicamente l'ottavo bit veniva spesso usato per il bit di parità, e poi è stato sfruttato nelle "estensioni" di ASCII — così sono nati diversi set di un byte per le varie localizzazioni, il che ha portato a molta confusione.

Se scrivi "Hello", su disco sarà più o meno così (1 byte per carattere; per il ASCII a 7 bit il bit più significativo è zero):

H (01001000) e (01100101) l (01101100) l (01101100) o (01101111)

Semplice. Ma dove stanno le lettere russe o gli ideogrammi? In ASCII non ci sono — è un "dizionario monolingue", buono solo per il set latino base.

4. "Caratteri illeggibili" — perché la codifica non è uno scherzo

A volte, aprendo un file, vedi qualcosa tipo Привет invece di «Привет». Questo si chiama "caratteri illeggibili" (o Mojibake) — risultato della lettura di byte con la codifica sbagliata.

Supponiamo che tu abbia salvato «Ciao, mondo!» in codifica Windows-1251, dove i byte per le lettere russe di «Привет» possono essere così (semplificato):

  • П207
  • р240
  • и232
  • в226
  • е229
  • т242

Poi il tuo collega apre il file con un editor che si aspetta ISO-8859-1 (Latin-1), oppure hai usato StreamReader senza specificare la codifica e quella non coincide con la codifica del file. Risultato: il byte 207 viene interpretato come un carattere di un'altra tabella — e il testo “si rompe”.

Simbolo originale (Windows-1251) Rappresentazione in byte (esempio) Carattere letto come ISO-8859-1
П
207
Ç
р
240
à
и
232
è
в
226
â
е
229
å
т
242
ò

Alla fine otteniamo Çàèâåò invece di «Ciao». Se un carattere non esiste nella codifica prevista, vedrai quadrati o punti interrogativi.

La conclusione pratica è semplice: quando leggi/scrivi testo è importante specificare esplicitamente la codifica, soprattutto se la sorgente dei dati non è sotto il tuo controllo. In .NET lo fai passando la Encoding corretta a StreamReader/StreamWriter (per esempio, UTF-8 o Encoding.GetEncoding("windows-1251")). Questo aiuta a evitare i caratteri illeggibili e garantisce uno scambio corretto di dati tra sistemi.

Nelle prossime lezioni impareremo a scegliere e specificare con sicurezza la codifica quando lavoriamo con file e stream, così il tuo codice sarà universale, internazionale e affidabile.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION