Bon.
Un bon fichier ASCII standard n'a effectivement aucune valeur supérieure à 7 bits (0...127), mais dans la pratique, on utilise 8 bits (pour coder les caractères accentués par exemple, qui sont absents du code ASCII).
Donc, difficile de les différencier.
Enfin, humainenement, ça saute aux yeux.
Pour un logiciel, c'est moins évident.
Une astuce pour différencier: Faire des statistiques du fichier.
Dans un fichier texte:
- on trouvera en grande majorité des codes < 128.
- on trouvera beaucoup d'espace (code 32).
- on trouvera assez souvent des retours à la ligne (10, 13 ou 13+10 selon la provenance du fichier texte).
- selon la langue, certains caractères se trouveront plus souvent ('e' par exemple).
- on ne trouvera pas généralement pas d'octets de valeur 0 au milieu du fichier.
- les codes ascii inférieurs à 32 sont très rares, en dehors de 9 (tabulation), 10/13 (retours à la ligne) et 12 (saut de page).
Je pense qu'on doit pouvoir s'en sortir avec ça et bricoler une routine capable de discerner les deux avec un assez bon pourcentage de réussite.