La elección no es entre ASCII y UTF-8. ASCII es una codificación de 7 bits, y UTF-8 la reemplaza; cualquier texto ASCII válido también es UTF-8 válido. Los problemas surgen cuando usa caracteres no ASCII; para estos debe elegir entre UTF-8, UTF-16, UTF-32 y varias codificaciones de 8 bits (ISO-xxxx, etc.).
La mejor solución es apegarse a un estricto juego de caracteres ASCII, es decir, simplemente no use caracteres que no sean ASCII en su código. La mayoría de los lenguajes de programación proporcionan formas de expresar caracteres no ASCII utilizando caracteres ASCII, por ejemplo, "\u1234"
para indicar el punto de código Unicode en 1234. Especialmente, evite utilizar caracteres no ASCII para los identificadores. Incluso si funcionan correctamente, las personas que usan una distribución de teclado diferente te maldecirán por hacer que escriban estos caracteres.
Si no puede evitar los personajes que no son ASCII, UTF-8 es su mejor opción. A diferencia de UTF-16 y UTF-32, es un superconjunto de ASCII, lo que significa que cualquiera que lo abra con la codificación incorrecta obtiene al menos la mayor parte correcta; y, a diferencia de las páginas de códigos de 8 bits, puede codificar sobre todos los caracteres que necesitará, sin ambigüedades, y está disponible en todos los sistemas, independientemente de la configuración regional.
Y luego tienes la codificación que procesa tu código; Esto no tiene que ser lo mismo que la codificación de su archivo fuente. Por ejemplo, puedo escribir PHP fácilmente en UTF-8, pero establecer su codificación interna de multibyte en, por ejemplo, Latin-1; debido a que el analizador PHP no se preocupa en absoluto por las codificaciones, sino que solo lee secuencias de bytes, mis literales de cadena UTF-8 serán malinterpretados como Latin-1. Si saco estas cadenas en un terminal UTF-8, no verá ninguna diferencia, pero las longitudes de cadena y otras operaciones multibyte (por ejemplo substr
) producirán resultados incorrectos.
Mi regla de oro es usar UTF-8 para todo; solo si tiene que lidiar con otras codificaciones, convierta a UTF-8 lo antes posible y de UTF-8 lo más tarde posible.