Les autres réponses définissent assez bien ce qu'est l'ASCII et ce qu'est le non-ASCÌI. J'aimerais ajouter un peu de contexte et de conséquences.
Le problème est vraiment que l'ASCII a été la norme de facto pendant très longtemps, malgré le fait qu'il ne fonctionnait pas'bien en dehors des USA.
La mémoire est organisée en entités de 8 bits mais par exemple la communication série utilisait souvent des caractères de 7 bits et donc les codes en dehors de 0...127 ne pouvaient pas être transmis. Notez également que de nombreux UART supportent encore des caractères de 5 et 6 bits provenant d'encodages encore plus anciens que l'ASCII.
Certains terminaux utilisaient le 8e bit "disponible" à d'autres fins comme les caractères gras ou clignotants, etc. De même, certains utilitaires vérifient que les arguments ne contiennent que des caractères ASCII valides en vérifiant que chaque caractère est 0...127 ou même numérique 32...127 pour les caractères non contrôlés.
D'autres pays ont adapté l'ASCII pour y intégrer certains caractères nationaux. L'ajout d'un 8e bit romprait la compatibilité dans de nombreux cas, mais certains caractères rarement utilisés pouvaient être remplacés. En Suède, nous avons remplacé ][ par les caractères suédois ÅÄÖ, }{| par åäö et quelques autres. Cela a assez bien fonctionné, sauf que le tri de ces caractères nationaux les mettait dans le mauvais ordre.
Le problème du tri restait avec les jeux de caractères 8 bits (pages de code Windows/Mac et normes ISO 8859) car la plupart des programmes trient dans l'ordre des points de code. Il y a plein de programmes qui acceptent les caractères 8 bits mais qui gèrent mal le tri des caractères non ASCII.
Maintenant, avec Unicode qui devient la norme, les problèmes de codage des caractères finiront par diminuer, mais les vieux logiciels ont tendance à rester en service très longtemps.
La question de l'encodage des caractères n'a pas été résolue.