Es bien sabido que utf-8 funciona mejor para el almacenamiento de archivos y el transporte de red. Pero la gente debate si utf-16/32 es mejor para procesar. Un argumento importante es que utf-16 sigue siendo de longitud variable e incluso utf-32 aún no es un punto de código por carácter, entonces, ¿cómo son mejores que utf-8? Mi opinión es que utf-16 es un muy buen compromiso.
En primer lugar, los caracteres fuera del BMP que necesitan puntos de código dobles en utf-16 son extremadamente raros. Los caracteres chinos (también algunos otros caracteres de Asia) en ese rango son básicamente los muertos. La gente común no los usará en absoluto, salvo que los expertos los utilicen para digitalizar libros antiguos. Por lo tanto, utf-32 será un desperdicio la mayor parte del tiempo. No se preocupe demasiado por esos personajes, ya que no harán que su software se vea mal si no los manejó correctamente, siempre y cuando su software no sea para esos usuarios especiales.
En segundo lugar, a menudo necesitamos que la asignación de memoria de cadena esté relacionada con el recuento de caracteres. p.ej. una columna de cadena de base de datos para 10 caracteres (suponiendo que almacenemos cadena unicode en forma normalizada), que será de 20 bytes para utf-16. En la mayoría de los casos, funcionará así, excepto en casos extremos, solo tendrá de 5 a 8 caracteres. Pero para utf-8, la longitud de bytes común de un personaje es 1-3 para idiomas occidentales y 3-5 para idiomas de Asia. Lo que significa que necesitamos 10-50 bytes incluso para los casos comunes. Más datos, más procesamiento.
Para los protocolos existentes que no son compatibles con UTF-8, esa es una buena razón para no usar UTF-8 :) Personalmente solo me gusta apoyar la codificación UTF-8 ya que permite caracteres Unicode mientras permite que mi vida gire en torno al Espacio de caracteres ASCII (la apertura de contenido UTF-16 en un editor "tonto" me hace sangrar los ojos). –
@pst: B e c a u s e l t o o s k i l e t i s e s? – dan04