Se hizo mucho trabajo muy temprano con códigos de baudot de 5 bits, pero rápidamente se volvieron bastante limitantes (solo 32 caracteres posibles, así que básicamente solo letras mayúsculas y unos pocos signos de puntuación , pero no hay suficiente "espacio" para los dígitos).
Desde allí, bastantes máquinas fueron para caracteres de 6 bits. Sin embargo, esto seguía siendo bastante inadecuado: si querías letras y dígitos en mayúsculas y minúsculas (en inglés), eso dejaba solo dos caracteres más para la puntuación, por lo que la mayoría todavía tenía un solo caso de letras en un conjunto de caracteres.
ASCII definió un conjunto de caracteres de 7 bits. Eso fue "lo suficientemente bueno" para muchos usos durante mucho tiempo, y también ha formado la base de la mayoría de los juegos de caracteres más nuevos (ISO 646, ISO 8859, Unicode, ISO 10646, etc.)
Las computadoras binarias motivan a los diseñadores a hacer potencias de dos tamaños. Ya que el conjunto de caracteres "estándar" requería 7 bits de todos modos, no era demasiado complicado agregar un bit más para obtener una potencia de 2 (y para entonces, el almacenamiento se estaba volviendo lo suficientemente más barato que "perder" un poco para la mayoría de los personajes era más aceptable también).
Desde entonces, los conjuntos de caracteres se han movido a 16 y 32 bits, pero la mayoría de las computadoras principales se basan en gran medida en la PC original de IBM (un diseño que tendrá 30 años en los próximos meses). ). Por otra parte, una parte suficiente del mercado está lo suficientemente satisfecha con los caracteres de 8 bits que, incluso si la PC no hubiera alcanzado su nivel de dominio actual, no estoy seguro de que todos hagan todo lo posible con caracteres más grandes.
También debo añadir que el mercado ha cambiado bastante. En el mercado actual, el tamaño del carácter se define menos por el hardware que por el software. Windows, Java, etc., se trasladó a caracteres de 16 bits hace mucho tiempo.
Ahora, el obstáculo para admitir caracteres de 16 o 32 bits es solo mínimamente por las dificultades inherentes a los mismos caracteres de 16 o 32 bits, y en gran medida por la dificultad de admitir i18n en general. En ASCII (por ejemplo), detectar si una letra es mayúscula o minúscula, o convertir entre las dos, es increíblemente trivial. En Unicode completo / ISO 10646, es básicamente indescriptiblemente complejo (hasta el punto de que los estándares ni siquiera lo intentan, dan tablas, no descripciones). Luego agrega el hecho de que para algunos idiomas / conjuntos de caracteres, incluso la idea básica de mayúsculas / minúsculas no se aplica. Luego agrega el hecho de que incluso mostrar caracteres en algunos de ellos es mucho más complejo.
Todo esto es lo suficientemente complejo como para que la gran mayoría de los programas ni siquiera lo intenten. La situación está mejorando lentamente, pero lentamente es la palabra clave.