URL: https://linuxfr.org/news/confusable-homoglyphs-une-bibliotheque-pour-gerer-les-caracteres-qui-se-ressemblent Title: confusable-homoglyphs : une bibliothèque pour gérer les caractères qui se ressemblent Authors: SpaceFox Xavier Teyssier, Davy Defaud et Benoît Sibaud Date: 2019年03月14日T00:05:02+01:00 Tags: jvm, bibliothèque, library, python, php, unicode et java Score: 39 Bonjour tout le monde, J’ai l’honneur de vous présenter une nouvelle bibliothèque Java (en fait compatible avec n’importe quel langage qui utilise la machine virtuelle Java, normalement) : **[confusable-homoglyphs](https://github.com/SpaceFox/confusable-homoglyphs)**. « Nouvelle » dans sa version Java, car c’est en réalité [un portage d’une bibliothèque Python](https://github.com/vhf/confusable_homoglyphs). Notez qu’il en existe aussi une [version PHP](https://github.com/photogabble/php-confusable-homoglyphs). C’est un outil sous licence Apache 2.0 qui permet de gérer directement au sein d’une application les caractères Unicode qui se ressemblent, et donc qui sont source de confusion. ---- [Dépôt Git de confusables-homoglyphs (Java)](https://github.com/SpaceFox/confusable-homoglyphs) [Version Python (originale) de confusables_homoglyphs](https://github.com/vhf/confusable_homoglyphs) [Portage en PHP de confusable-homoglyphs](https://github.com/photogabble/php-confusable-homoglyphs) [Retour d’expérience sur le portage Python → Java](https://zestedesavoir.com/billets/3090/jai-porte-une-lib-python-en-java/) ---- # Quel est donc le but de cette bibliothèque ? Les humains utilisent divers systèmes d’écriture, et ce qui devait arriver, arriva : il y a des caractères qui se ressemblent (voire qui sont graphiquement identiques, selon la police d’écriture), mais qui sont différents. Or, [de telles confusions peuvent avoir des conséquences fâcheuses](https://zestedesavoir.com/tutoriels/3039/linternationalisation-et-ses-pieges-creer-un-logiciel-universel/gerer-differentes-langues/#gestion-des-diacritiques), par exemple : - l’utilisateur « ΑlaskaJazz » (le premier Α est un alpha majuscule grec) peut se faire passer pour l’utilisateur « AlaskaJazz » (uniquement des lettres latines) ; - on peut vous inciter à vous connecter sur _www.microsоft.com_ ou _www.faςebook.com_ au lieu de _www.microsoft.com_ ou _www.facebook.com_ ; - etc., on pourrait multiplier les exemples désagréables à l’infini. Si Unicode fournit des listes des caractères qui peuvent prêter à confusion, elles sont difficiles à utiliser en l’état : ce sont des fichiers textes avec un formatage particulier, qui plus est hébergés sur des serveurs instables et fréquemment hors ligne. confusable-homoglyphs permet de gérer ces confusions en détectant et donnant des informations sur les caractères potentiellement problématiques. # D’accord, mais comment ça s’utilise ? La bibliothèque est disponible sur [Maven Central](https://search.maven.org/artifact/fr.spacefox/confusable-homoglyphs) et donc s’importe comme n’importe quelle autre bibliothèque Java, ici avec Maven ou Gradle : ```xml fr.spacefox confusable-homoglyphs 1.0.1 ``` ```gradle compile group: 'fr.spacefox', name: 'confusable-homoglyphs', version: '1.0.1' ``` Puis on initialise l’une des deux classes utilitaires, selon ce qu’on veut faire : ```java Categories categories = Categories.fromInternal(); Confusables confusables = Confusables.fromInternal(); // ou si on préfère fournir un jeu de données spécifique : Categories categories = Categories.fromJson("/full/path/to/categories.json"); Confusables confusables = fromJsons("/full/path/to/categories.json", "/full/path/to/confusables.json"); // (Confusables utilise Categories en interne). ``` Et on utilise les objets créés. Il y a [un résumé de l’API publique ici](https://github.com/SpaceFox/confusable-homoglyphs#public-api). La création est relativement longue par rapport à l’utilisation, il vaut mieux garder ces objets vivants entre deux appels. # Les intentions et contraintes du projet En réalité, je n’ai pas besoin de cette bibliothèque, au‐delà du fait que je trouve qu’elle manque à Java. Je voulais aussi et surtout : - connaître la difficulté à porter une bibliothèque de Python à Java ; - voir ce que c’est de créer un projet, seul, de A à Z et complet (avec documentation et tout) ; - essayer de déployer quelque chose sur Maven (en tant que fournisseur). Les contraintes que je me suis choisies pour ce projet étaient donc : - licence libre (Apache 2.0) ; - Java 8, pour garder une bonne compatibilité avec les projets actuels et les différents langages qui utilisent la machine virtuelle Java ; - une API aussi proche de possible que l’originale (il y aura une version 2 avec des modifications dans cette API, un jour) ; - disponible sur Maven Central, pour être utilisable comme n’importe quelle bibliothèque Java ; - avec une doc complète ; - avec une couverture de tests correcte ; - avec de l’intégration continue via GitHub (j’ai toujours utilisé GitLab et GitLab CI pour mes autres projets Java). Et comme j’aime bien partager mon expérience, [j’ai écrit un billet sur ce que j’ai tiré de celle‐ci](https://zestedesavoir.com/billets/3090/jai-porte-une-lib-python-en-java/). Je n’ai jamais eu l’occasion de vérifier que tout fonctionne bien sous Android. Si quelqu’un s’en sert dans cet environnement, que cette personne n’hésite pas à me faire signe. J’espère que ce petit utilitaire – ou les versions Python ou PHP – pourront vous servir un jour ! N’hésitez pas à créer tickets et demandes d’intégration (_pull requests_) si le cœur vous en dit ! -------------------------- Cette dépêche est publiée sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

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