Un homoglyphe (calque de l'anglais : homoglyph) désigne en typographie un graphème, un caractère ou un glyphe qui semble identique ou très similaire à un ou plusieurs autres. L'appellation peut s'étendre aux chaînes de caractères présentant la même propriété, qui s'apparente dans ce cas à un homographe.
À l'opposé, un synoglyphe (de l'anglais : synoglyph) désigne un glyphe dissemblable d'un autre, mais ayant la même signification. On rencontre parfois l'appellation « variante d'affichage » (« display variant »).
En 2008, le Consortium Unicode publie son Technical Report #36[1], qui comporte une série d'articles portant sur les similitudes visuelles de caractères au sein d'un même script Unicode (en) ou entre différents scripts.
Ces homoglyphes sont à l'origine de confusions. Un exemple historique est l'emploi du 'y' pour représenter le 'þ' lors de la transcription de textes de vieil anglais dans un script ne comportant pas ce dernier caractère. Ainsi, la multiplication des enseignes intitulées « Ye olde (en) shoppe » a laissé supposer que le mot « the » a pour forme ancienne ye [jiː].
Les polices d'écriture comportant des homoglyphes sont donc considérées comme inaptes pour écrire une formule mathématique, une URL ou un code source, un identifiant ou tout autre texte où les caractères ne peuvent pas toujours être distingués en l'absence de contexte linguistique.
Deux ensembles d'homoglyphes sont aujourd'hui très communs. Il s'agit d'une part du chiffre zéro et du o majuscule (0 et O), d'autre part du chiffre un, du l minuscule et du i majuscule (1, l et I). À l'époque des claviers de machine à écrire, il existait peu voire pas de différence visuelle entre ces caractères, et les typographes les ont souvent utilisés indifféremment pour gagner du temps. De fait, une bonne partie des claviers ne disposait pas de touche dédiée pour le chiffre un, imposant l'emploi du i majuscule, et certains claviers n'avaient pas non plus de zéro, qui était remplacé par le o majuscule. Lorsque ces typographes entrèrent dans l'ère informatique dans les années 1970 et 1980, ils ont gardé leurs habitudes de frappe, occasionnant des confusions dans les codages[réf. nécessaire].
Les polices les plus communes d'emploi font une distinction claire entre ces jeux d'homoglyphes, généralement en utilisant un chiffre zéro moins large, et en traçant le chiffre un avec des empattements proéminents. Auparavant, les premières impressions informatiques allaient plus loin, en distinguant le zéro au moyen d'un point ou d'une barre, ce dernier cas amenant une nouvelle homoglyphie avec le Ø des langues scandinaves et le phi (Φ) grec. L'effet conjoint de ces efforts pour distinguer les caractères homoglyphes d'une part, et la retraite progressive des codeurs ayant été formés sur machine à écrire d'autre part, a considérablement limité le nombre d'erreurs homoglyphiques relativement à ces caractères en particulier. Le niveau de similitude entre deux caractères pour un observateur donné est appelé la « similitude visuelle » (« visual similarity »)[2].
Il peut arriver que certaines combinaisons de caractères ressemblent à un autre caractère. C'est par exemple le cas pour rn qui ressemble à m, cl à d ou encore vv et w.
Dans le cas de polices très peu espacées, comme tahoma, de nouveaux homoglyphes apparaissent, comme cj, cl, ci qui ressemblent alors respectivement à g, d et a.
Une autre source d'homoglyphes est l'emploi de ligatures typographiques. On citera fi, ligature pour les caractères f et i, qui peut apparaître similaire à un a majuscule (A).
Le codage des caractères en Unicode comprend des groupes d'homoglyphes très proches. Dans le contexte actuel, comme le relève le rapport de 2008 du Consortion Unicode[1], cela représente certains risques, en particulier depuis la mise en place des noms de domaine internationalisés. Il peut s'agir d'usurpation d'un nom de domaine, en employant un homoglyphe, créant ainsi un deuxième nom de domaine, pas immédiatement distinguable du premier, qui peut être employé pour un hameçonnage. (voir Attaque homographique sur nom de domaine internationalisé (en)).
Dans de nombreuses polices, le 'Α' de l'alphabet grec, le 'А' de l'alphabet cyrillique et le 'A' de l'alphabet latin sont visuellement identiques, tout comme le 'a' latin et le 'а' cyrillique. L'ensemble des caractères latins formant la chaîne de caractères « aeopcTxy » est l'homographe de la chaîne de caractères « аеорсТху », écrite exclusivement avec des caractères cyrilliques. D'autres caractères proches peuvent être employés pour de telles usurpations de nom de domaine (en), comme le 'í' (i accent aigu) pour remplacer un 'i', 'É' (e majuscule accent aigu), Ė (e majuscule point suscrit) et È (e majuscule accent grave), ou 'Í' (i majuscule accent aigu) et 'ĺ' (l minuscule accent aigu). Autre sujet, en chinois, de nombreux caractères simplifiés sont des homoglyphes du caractère traditionnel correspondant.
Les concepteurs de registres de noms de domaine et de navigateurs web travaillent afin de minimiser le risque de confusion homoglyphique. De manière simple, cela commence par interdire les noms de domaines employant un mélange de caractères provenant de différents alphabets. Par exemple, l'enseigne Toys "R" Us ne pourrait pas proposer le nom de domaine toys-Я-us.org, utilisant le caractère cyrillique Я. Néanmoins, les adresses wíkipedia.org (de la Désencyclopédie en portugais) et wikipedia.org existent déjà, renvoyant à deux sites différents. Le domaine de premier niveau national du Canada, .ca, va un peu plus loin en imposant que les noms de domaine ne différant que d'un diacritique aient le même propriétaire[3]. Concernant les sinogrammes, si sur les domaines .org et .info, la réservation d'un nom de domaine comprenant un caractère (simplifié ou traditionnel) interdit l'enregistrement de l'autre à quiconque, et dans le cas pour le domaine .biz, les deux noms de domaine sont vendus conjointement, pointant vers le même serveur de domaine (en).
La détection d'homographes de toute sorte s'effectue au moyen de la « canonicalisation duelle » ou « canonisation duelle » [2]. La première étape consiste à identifier des ensembles homographiques, c'est-à-dire les caractères qui apparaissent similaires aux yeux des utilisateurs. Dès lors, un identifiant unique est attribué à l'ensemble homographique, appelé « canon ». La deuxième étape consiste à convertir chaque caractère du texte au moyen de son canon, étape correspondant à la canonicalisation. Si les canons de deux passages du texte sont les mêmes mais que le texte originel est différent, alors il existe des homographes dans le texte.
: document utilisé comme source pour la rédaction de cet article.