Beaucoup de travail très tôt a été fait avec des codes baudot 5 bits, mais ceux-ci sont rapidement devenus assez contraignants (seulement 32 caractères possibles, donc essentiellement des lettres majuscules et quelques signes de ponctuation, mais pas assez d'espace pour les chiffres) .
De là, plusieurs machines sont passées aux caractères 6 bits. Cela restait cependant assez insuffisant - si vous vouliez des lettres et des chiffres en majuscules et minuscules (anglais), il ne restait plus que deux caractères pour la ponctuation, de sorte que la plupart n'avaient encore qu'un seul cas de lettres dans un jeu de caractères.
ASCII définit un jeu de caractères 7 bits. Cela a été "assez bon" pour de nombreuses utilisations pendant longtemps et a également été à la base de la plupart des jeux de caractères les plus récents (ISO 646, ISO 8859, Unicode, ISO 10646, etc.).
Les ordinateurs binaires motivent les concepteurs à faire des tailles de deux. Comme le jeu de caractères "standard" nécessitait de toute façon 7 bits, ajouter un bit de plus pour obtenir une puissance de 2 n'était pas vraiment compliqué (et à ce moment-là, le stockage devenait suffisamment moins cher que "gaspiller" un peu pour la plupart des personnages était plus acceptable aussi).
Depuis lors, les jeux de caractères sont passés aux formats 16 et 32 bits, mais la plupart des ordinateurs grand public sont largement basés sur le PC IBM d'origine. Là encore, le marché est suffisamment satisfait des caractères 8 bits que, même si le PC n’avait pas encore atteint son niveau de domination actuel, je ne suis pas sûr que tout le monde ferait tout avec des caractères plus gros.
Je devrais aussi ajouter que le marché a pas mal changé. Dans le marché actuel, la taille des caractères est moins définie par le matériel que par le logiciel. Windows, Java, etc., sont passés depuis longtemps aux caractères 16 bits.
Or, la difficulté à prendre en charge les caractères 16 ou 32 bits n’est que très peu liée aux difficultés inhérentes aux caractères 16 ou 32 bits eux-mêmes, et en grande partie à la difficulté de prendre en charge l’impression en général. En ASCII (par exemple), détecter si une lettre est en majuscule ou en minuscule, ou effectuer une conversion entre les deux, est extrêmement simple. En plein Unicode / ISO 10646, la complexité est indescriptible (au point que les normes n'essayent même pas - elles donnent des tableaux, pas des descriptions). Ensuite, vous ajoutez le fait que pour certaines langues / jeux de caractères, même l’ idée de base des majuscules / minuscules ne s’applique pas. Vous ajoutez ensuite le fait que même afficher des caractères dans certains d’entre eux est beaucoup plus complexe encore.
Tout cela est suffisamment complexe pour que la grande majorité des logiciels n'essayent même pas. La situation s'améliore lentement, mais lentement, c'est le mot clé.