Se realizó una gran cantidad de 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 algunos signos de puntuación, pero no suficiente "espacio" para los dígitos) .
A partir de ahí, bastantes máquinas utilizaron caracteres de 6 bits. Sin embargo, esto todavía era bastante inadecuado: si deseaba letras y dígitos en mayúsculas y minúsculas (inglés), eso dejaba solo dos caracteres más para la puntuación, por lo que la mayoría todavía tenía solo un 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 conjuntos 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. Como el juego de caracteres "estándar" requería 7 bits de todos modos, no fue demasiado difícil 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 "desperdiciar" un poco para la mayoría de los personajes fue más aceptable también).
Desde entonces, los juegos de caracteres se han movido a 16 y 32 bits, pero la mayoría de las computadoras convencionales se basan en gran medida en la PC original de IBM. Por otra parte, una parte suficiente del mercado está suficientemente satisfecha con los caracteres de 8 bits que, incluso si la PC no hubiera alcanzado su nivel actual de dominio, no estoy seguro de que todos hagan todo con caracteres más grandes de todos modos.
También debo agregar que el mercado ha cambiado bastante. En el mercado actual, el tamaño de los caracteres se define menos por el hardware que por el software. Windows, Java, etc., se movieron 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 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 / ISO 10646 completo, 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 aún.
Todo eso es lo suficientemente complejo como para que la gran mayoría del software ni siquiera lo intente. La situación está mejorando lentamente, pero lentamente es la palabra clave.