Unicode, UTF-8 e le entità HTML

Nei computer i caratteri non sono nient'altro che sequenze di numeri. Una tabella che associa ad ogni carattere un numero diverso viene definita codifica di caratteri.
Una delle più famose codifiche di caratteri è ASCII, che usa 128 numeri (7bit per carattere), quindi può rappresentare 128 caratteri. A livello pratico si usarono però 8 bit anziché 7. Lasciando l'ottavo sempre impostato a 0 (zero) oppure usato per scopi particolari.

Avendo a disposizione solo 128 caratteri vengono esclusi moltissimi simboli, primi fra tutti le lettere accentate. Infatti tempo fà, nelle pagine web, per inserire caratteri non compresi nella codifica ASCII era necessario usare le così dette ENTITÀ HTML; per esempio à corrispondeva, e corrisponde tuttora, al carattere à, ± a ±, e così via...

Ovviamente tutto questo era molto scomodo nel momento che si doveva scrivere qualcosa in lingue diverse dall'inglese. Infatti, successivamente, parte di queste entità divennero inutili con l'estensione della codifica ASCII. Venne definito l'ASCII ESTESO (ISO 8859-1) che usa 256 numeri (8bit per carattere, usando l'ottavo bit dell'ASCII senza lasciarlo inutilizzato; chiaramente i primi 128 simboli, avendo l'ottavo bit pari a zero, sono identici a quelli dell'ASCII, rendendo i due sistemi compatibili). Questo permise ad esempio di non usare più le entità per le lettere accentate.
Come si può immaginare però le codifiche divennero tantissime, basti pensare alla quantità di simboli nelle lingue asiatiche, e quindi iniziarono a sorgere problemi di compatibilità, di trasformazione tra codifiche ecc...

Finalmente grazie al sistema di codifica Unicode, si sta spingendo per abbandonare tutte le codifiche finora in uso per adottarne una sola, universale. L'Unicode è una codifica che usa 1.114.111 numeri (quindi ha la possibilità di definire 1.114.111 caratteri), corrispondenti a 216 moltiplicato 17 (poco meno dei numeri ottenibili con 21 bit). (Questo strano numero comunque non dà problemi per la definizione dei caratteri con i bit. Una codifica è solo una relazione tra caratteri e numeri, i bit non c'entrano nulla; si ricordi infatti l'ASCII che usava 7 bit, un numero "bizzarro", ma in pratica si usavano 8 bit lasciando l'ottavo inutilizzato).

La storia sembrerebbe finita qua. E invece no. Bisogna capire come rappresentare questi numeri in formato binario. A prima vista si direbbe che è sufficiente prendere un numero sufficiente di bit (ad esempio 21 oppure un multiplo di 8, ad esempio 24) e poi associare ad ogni carattere il suo numero Unicode trasformato in binario. Questo modo di procedere però ha molti svantaggi su cui è inutile soffermarci. È sufficiente sapere che sono state sviluppate negli anni delle UTF (Unicode Transformation Format) cioè delle regole di trasformazione dei numeri Unicode in sequenze di bit. Le più famose e utili, sono senz'altro UTF-8 (praticamente lo standard mondiale attuale) e UTF-32.

È inutile spiegare quali sono le regole di uno e dell'altro, la cosa importante da sapere è che UTF-8 è una codifica che usa un numero di bit variabile (a gruppi di 8). Questo permette di usare meno bit per i primi simboli dello standard Unicode. I primi 128 simboli corrispondono agli stessi della codifica ASCII. In UTF-8 questi vengono trasformati nello stesso numero di bit dell'ASCII ESTESO. Gli altri 128 dell'ASCII ESTESO però, nonostante siano a seguire nello standard Unicode ed abbiano lo stesso numero associato, vengono resi in formato binario, usando UTF-8, con sequenze di bit differenti (2 byte anziché 1).
Pertanto se in un file vengono usati solo i primi 128 caratteri di Unicode, non c'è modo di distinguere se il file usi la codifica UTF-8 o ISO-8859-1, perché sono la stessa cosa.

Tornando a noi, grazie a Unicode e alla sua implementazione UTF-8, non c'è più bisogno di usare le entità HTML o quantomeno di usarle veramente al minimo. Infatti se il file viene salvato in codifica UTF-8 (vim lo fa di default) e se si dichiara UTF-8 la pagina html, allora si possono inserire direttamente questi caratteri strani nel testo: ∏ ∝ Ψ ψ √ 〉 » → ⇒ ℜ ® ρ ...
chiaramente bisogna trovare il posto da cui copiarli dato che pochissimi vengono generati da tastiera.
Lista delle Entità HTML e XML
Lista dei caratteri Unicode
Lista dei simboli Unicode

Lo standard XML definisce invece solo 5 entità. L'XHTML, nonostante non sia nient'altro che un documento XML, supporta tutte le entità dello standard HTML anche se, per ovvi motivi, è sconsigliato usarle.
La scelta più saggia e che non comporta alcun sacrificio è quella di usare Unicode e limitarsi ad usare, per una serie di ragioni di ordine pratico che non stiamo qui a spiegare, ove necessario, le seguenti entità: &quot; ("), &amp; (&), &lt; (<) e &gt; (>); cioè le 5 dell'XML tranne una.