• [^] # Re: équivalent à la biblio Python FTFY

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Sortie de uchardet 0.0.8 pour la détection de codages de caractères. Évalué à 10. Dernière modification le 22 décembre 2022 à 18:31.

    Qu'est-ce qu'il se passe si je voulais vraiment écrire « 1⁄2uf » ?

    Si ton bout de texte, c'est juste "1⁄2uf", c'est clair que c'est pas assez et uchardet ne peut pas te sortir un résultat fiable (je vais même pas prendre la peine de tester; si c'est pour tester sur 3 octets, vous vous êtes trompé de logiciel; même si ça trouvait le bon résultat, j'attribuerais cela à la chance). Mais si ton texte est "Bonjour monsieur, pourriez-vous me servir 2 douzaines d'1⁄2ufs, une bouteille de lait, et une baguette s'il vous plaît", tu auras bien du mal à me convaincre (et "convaincre" uchardet) que c'est un décodage pertinent (en comparaison à: "Bonjour monsieur, pourriez-vous me servir 2 douzaines d'œufs, une bouteille de lait, et une baguette s'il vous plaît" puisque le concept est de comparer les scores, je le rappelle, comme techniquement le premier décodage est aussi valide, mais le texte lui ne l'est pas en français).

    Le test en réel avec uchardet 0.0.8:

    echo "Bonjour monsieur, pourriez-vous me servir 2 douzaines d'œufs, une bouteille de lait, et une baguette s'il vous plaît" | iconv -f UTF-8 -t ISO-8859-15 | uchardet 
    ISO-8859-15
    

    L'erreur dont tu parles se produit si uchardet se plante et retourne ISO-8859-1 (auquel cas, en recodant en UTF-8, tu obtiens 1⁄2 à la place de œ). Comme tu le vois, sur un vrai texte complet, uchardet ne se plante pas.

    Il peut y avoir des cas particuliers où tu voudrais vraiment dire "1⁄2uf", par exemple je pourrais imaginer un texte plus grand qui traite justement du sujet des codages de caractères et donne un exemple de décodage loupé. Mais dans ce cas, le texte est vraisemblablement bien plus long, du moins suffisamment pour justement faire pencher la balance vers le bon codage quand même (celui qui gardera "1⁄2uf" sur l'endroit où c'est ce que tu voulais et "œuf" sur les endroits où c'est ce que tu veux). De toutes façons, ce texte plus long, totalement hypothétique, ne sera ni en ISO-8859-15, ni ISO-8859-1 puisqu'aucun des 2 n'a les 2 caractères (donc tu ne peux traiter ce sujet dans un tel codage). Ce texte serait probablement en UTF-8.

    En gros, tu essaies de raisonner en terme de "comment arriver à tromper le système". Et oui, soyons clair, tu peux toujours tromper un système informatique, trouver des cas bizarres et extrêmes, surtout si le système est basé sur les statistiques. Il suffit par exemple de travailler dur pour produire un vrai texte en français en faisant exprès d'aller à l'encontre de toutes les statistiques habituelles de la langue française, en utilisant des tournures particulières, le maximum de mots peu usités, du franglais ou le plus de mots étrangers possibles (mais qu'on utilise quand même en France), etc. Oui tu pourras toujours me sortir un exemple qui pête un tel système. Parce que c'est pas un système fait pour déjouer les ruses, ce qui n'a aucun intérêt selon moi. C'est un système fait pour être utilisé dans la vie réelle, sur de vrais textes de diverses langues. Et dans ce contexte, uchardet fonctionnera 99,99% des fois sur les codages et langues prises en charge (statistiques tirées du chapeau mais franchement j'attends encore les contre-exemples de la vraie vie et pas créés spécifiquement pour ruser et tromper l'outil). 😇

    Pour moi, ton d'exemple (et "si je voulais vraiment écrire « 1⁄2uf »", je sais pas combien de fois dans votre vie, vous avez voulu écrire ce mot "1⁄2uf" si courant 🙄 dans notre langue, le mettre dans un fichier ou une base de donnée, sans aucun autre texte contextuel, juste ce mot et c'est tout, puis vous êtes demandés plus tard son codage! Moi perso: jamais! 😜) est à ranger dans la catégorie de ceux qui donne des bouts de 3 lettres aléatoires et s'étonnent qu'uchardet ne trouve pas le codage qu'ils avaient en tête: sauf qu'uchardet ne fait toujours pas de magie ni ne lit dans la tête des gens! 😛

    La détection de charset est très utile, mais ça devrait être du dernier recours quand tout à échoué. Ça marche très bien, mais ce n'est pas parfait.
    [...]
    Cette négligence nous coûte de la complexité et les détecteurs de charset ont en effet encore de beaux jours devant eux. Je comprends bien qu'il y a des enjeux de rétrocompatibilité, mais il y a un moment où faut décider de corriger les choses, fournir des outils de compatibilité et arrêter les bêtises.

    Tout ce que tu dis, c'est comme dire que c'est nul qu'on soit pas encore tous passé à IPv6. Donc faut arrêter de faire en sorte que son logiciel fonctionne avec IPv4 parce que c'est le passé (soyez libre de ne pas prendre en charge IPv4 dans un logiciel réseau ahahah!) ou que Wayland est le futur, donc faut arrêtez de faire en sorte que nos logiciels marche avec X11 (on entend ça parfois; mais va dire aux développeurs de logiciel d'abandonner la majeure partie des utilisateurs sous Linux!), etc.

    Dans les faits, nous on veut juste que nos machines ou logiciels marchent. C'est tout. C'est pas être en désaccord que la nouvelle technologie X est peut-être vraiment meilleure ou pas que l'ancienne technologie Y. C'est juste que les problèmes d'Y existent encore et qu'on peut pas faire comme s'ils n'existaient pas. Typiquement pour en revenir à mon problème de sous-titres, j'allais pas dire "oooh comment il ose ce gus qui a fait gratuitement des sous-titres pour les donner à tous, et qui a même pas utilisé UTF-8 pour cela! Quel goujât! Pour la peine, je vais pas utiliser ses sous-titres!". Non je dis: "zut, j'ai vraiment envie de voir ce film mais on a besoin des sous-titres. Ce serait bien si mon lecteur vidéo était capable de détecter le bon codage sans que je m'en mêle!" Et donc je règle ce problème (je me suis arrangé pour que mon lecteur détecte au mieux le codage). Parce que je peux pas retrouver tous les gens sur internet qui font des sous-titres en hobby (et même si je le pouvais, aller leur faire la leçon sur le codage de caractère — un truc qu'ils ne comprendront sûrement pas de toutes façons parce qu'ils s'en fichent — n'est pas un truc que j'ai particulièrement envie de faire).
    La théorie est belle, mais bon... Perso je pense aussi que la détection de charset a encore de très beaux jours devant elle (comme la détection de langage, qui est le nouvel usage d'uchardet; j'en parlerai plus en détail à la prochaine sortie du logiciel) mais j'y mets aucun sentiment.

    Je comprends la frustration

    Ahahah. Je suis pas du tout frustré par la situation. J'ai plus l'impression que c'est toi qui est frustré sur le coup, non? 😉

    si ces outils n'existaient pas, peut-être que les logiciels qui produisent du contenu s'assureraient peut-être de standardiser sur un sous-ensemble utile de charset

    LOL Y a bien une trentaine d'années (probablement plus) d'histoire de l'informatique pour réduire à néant ta théorie. 😆

    Comme l'historique dans mon article le montre, ce type de logiciel de détection de codage a vraiment commencé à être utilisé vers 2015 (pour uchardet qui commence à être utilisé dans quelques logiciels à partir de 2015; puis le développement de CED dont le premier commit est de 2016; puis chardetng dont la première sortie est 2019...). La réalité, c'est juste que c'est encore très peu utilisé globalement et que donc les gens ont toujours constamment des problèmes de codage dans une majorité de logiciels. Donc dire que c'est la faute de ce type d'outil qu'on est dans cette situation, c'est complètement inverser les responsabilités et le cause à effet.

    La réalité est juste: (1) on est dans cette situation, c'est comme ça et c'est un fait; (2) ça s'améliore progressivement mais ça prend du temps et en attendant, c'est quand même mieux si on arrive à lire les fichiers sans problèmes de décodage bizarre et (3) même si un jour, tout le monde utilise UTF-8, ça n'efface pas magiquement le passé pour autant, ainsi que les milliards de fichiers et textes en base de données qui ont été créés depuis des décennies et dont une grosse partie va encore être utilisés quelques décennies de plus.

    Donc on est dans cette situation, c'est comme ça. Autant tirer le meilleur parti d'une situation bordélique plutôt qu'énoncer des "et si". 😁

    Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]