URL: https://linuxfr.org/users/calandoa/journaux/comment-identifier-un-encodage Title: Comment identifier un encodage? Authors: calandoa Date: 2004年01月15日T18:04:07+01:00 Tags: Score: 0 Une question me tarabuste en ce moment : comment reconnaître l'encodage d'un fichier texte (ISO-8859-x, CP 125x, Mac...)? Quelqu'un a-t-il déjà implémenté un algorithme de ce type? J'ai eu beau chercher, j'ai pas trouvé grand chose qui correspondait à mes attentes... On pourrait cependant imaginer quelques solutions : - Une reconnaissance de mots à partir de dictionnaires : super lourd, il faudrait un dico par langue supportée... c'est quand même la solution choisie par quelques softs commerciaux spécialisés dans la reconnaissance de langue (et accessoirement de charset) ; - Calculer la fréquence de chaque caractère, comparer les résultats avec des "empreintes" pour chaque langue et en déduire la langue puis le charset: si on a par exemple une majorité de 0xE0, E8, E9 parmi les octets supérieurs à 0x80, on peut déduire qu'on a du français et du ISO-8859-1 ou CP1252 (correspondance avec "à, é, è"): le problème est que si on a affaire à un document multi langue (par ex une base de donnée sur des personnes en europe, le genre de truc dont je m'occupe en ce moment), les résultats doivent être completement faussés! - A partir du type de chaque caractère pour chaque charset (majuscule, minuscule, signes, espace, caractère de contrôle...) on remplace les charactères du texte par leur type et on voit si ça colle : la séquence "espace, maj, min,min,min,min, espace" à plus de chance de coller que "espace, maj, min,min,maj, min, espace" ou que "espace, maj, min,min, signe,min, espace". Je suis pas mal sur cette solution en ce moment, mais les résultats sont mitigés et je ne souhaite pas rentrer dans des algos trop compliqués qui dépendent fortement de chaque langue. Voilà, si il y en a qui ont d'autres solutions à proposer, je suis preneur... je distribuerai des paquets d'aspirine comme récompense s'il m'en reste...

AltStyle によって変換されたページ (->オリジナル) /