Unicode è logicamente un codice a 21 bit. Poiché i computer moderni non funzionano convenientemente con tali unità, ci sono varie soluzioni: usa 32 bit (4 byte), sprecando un sacco di bit, specialmente se i tuoi dati sono prevalentemente in inglese; usa uno schema speciale che usa una o due unità a 16 bit per carattere; e utilizzare un numero variabile di byte da 8 bit per carattere. Queste sono conosciute come codifiche di trasferimento UTF-32, UTF-16 e UTF-8.
Windows utilizza internamente UTF-16, mentre UTF-8 domina per es. sul Web, quindi è spesso necessario convertire tra di loro. Questo non è banale, ma di solito è realizzato con routine di libreria appropriate, forse implicitamente, a seconda dell'ambiente di programmazione. UTF-32 è usato raramente.
Tecnicamente, UTF-16 è molto semplice per tutti i caratteri che si adattano al sottospazio a 16 bit di Unicode, Basic Plilingual Plane (BMP), possibilmente tutti i personaggi che hai mai sentito nominare. UTF-8 è più complesso ma è stato progettato con enfasi occidentale: tutti i caratteri Ascii sono rappresentati come byte singoli in UTF-8, quindi qualsiasi file che contiene Ascii è quasi della stessa dimensione in UTF-8 come in Ascii. Questo è opposto a UTF-16, che usa sempre due byte per carattere Ascii.