Per una codifica esterna (cioè una codifica di cose che non sono all'interno del tuo programma) è molto difficile da battere UTF-8; supporta ogni carattere che i tuoi utenti potrebbero mai ragionevolmente aver bisogno e c'è molto supporto in molti sistemi operativi e strumenti. (L'unico punto che conta come eccezione è nei nomi dei file, dove è necessario utilizzare le convenzioni della piattaforma se si desidera qualsiasi tipo di interoperabilità.) Fortunatamente, molte piattaforme ora usano UTF-8 per questo motivo, quindi l'avvertimento è discutibile punto lì.)
Per una codifica interna, le cose sono più complesse. Il problema è che un personaggio in UTF-8 non è un numero costante di byte, il che rende ogni tipo di operazione più complessa di quanto si possa sperare. In particolare, l'indicizzazione nella stringa per carattere (un'operazione molto comune quando si esegue l'elaborazione delle stringhe!) Cambia da un'operazione O (1) a un'operazione O (N) e questo può essere un problema di prestazioni molto significativo. Esistono diverse soluzioni alternative, ad esempio l'utilizzo di una struttura dei dati di corda o la conversione della stringa in un formato carattere a larghezza fissa (tipicamente ASCII, ISO 8859-1, UTF-16 o UTF-32, a seconda del valore Unicode massimo dei caratteri nella stringa). I problemi che affliggono tali formati (supporto limitato dei caratteri e / o problemi di endianità) in realtà non si applicano qui perché puoi applicare una trasformazione solo quando è significativa e la stai solo utilizzando come interna codifica.
Non pensare di poter fare a meno di memorizzare quella codifica interna su disco o assegnarla a un altro programma. Potrebbe essere "conveniente" ma è un problema che aspetta di accadere; invia / archivia i dati come UTF-8.
E non dimenticare che ci sono molti dati legacy là fuori, troppo da liquidare. Di particolare interesse sono le varie lingue dell'Asia orientale che hanno codifiche complesse che sono potenzialmente un po 'più corte di UTF-8, quindi risultano in meno pressione per convertire, ma ci sono molte altre questioni che si nascondono anche nei sistemi occidentali. (Non voglio sapere cosa sta succedendo nei principali database bancari ...)