Ce à quoi vous avez affaire est un de la de nombreux symptômes de ce que je considère comme le fléau de l'existence de tout programmeur moderne : La normalisation Unicode et l'interchangeabilité des encodages de caractères.
On pourrait littéralement écrire un livre de 1000 pages sur l'histoire de ce chaos (et je ne serais pas surpris que quelqu'un l'ait déjà fait). Je vais donc me limiter à l'essentiel de ce que vous rencontrez ici (et je vais simplifier un peu à l'extrême), puis je vous donnerai quelques liens pour "aller plus loin".
Tout d'abord, vérifions que le menu de saisie se trouve dans la barre de menu : Dans les préférences système, ouvrez le volet des préférences du clavier et cochez la case sous "Sources d'entrée". Ensuite, à partir de cet élément de menu, ouvrez ce qui est maintenant appelé "Afficher les Emoji et les Symboles". En haut à gauche de la fenêtre, sélectionnez "Personnaliser la liste", allez dans "Tables de codes" et cochez "Unicode" et "ISO-8859-1". Nous allons faire un bref exposé, puis une démonstration.
Donc, une fois de plus, il s'agit de deux questions interdépendantes mais distinctes :
1. Codage des caractères
Je considère que c'est le Cause profonde de cette question particulière. Le problème est que Microsoft est réputé depuis des années pour ne pas bien gérer Unicode, car ses plates-formes ont plus ou moins continué à utiliser une ancienne mise en œuvre de jeux de caractères multilingues, connus sous le nom de "caractères larges", UCS-2 ou UTF-16. Ce système a été mis en œuvre il y a des années, à une époque où l'on pensait que 16 bits (pour représenter ~65 000 caractères) seraient suffisants pour coder tous les symboles dont nous aurions jamais besoin. Aujourd'hui, il existe 1 114 112 symboles Unicode normalisés.
Ainsi, aujourd'hui, la plupart des systèmes (et tout ce qui est Apple) utilisent un codage appelé UTF-8, un largeur variable le codage des caractères, où il n'y a pas de nombre fixe de bits pour coder un caractère donné. Cela lui permet d'être rétrocompatible avec l'ASCII et d'ajouter autant de nouveaux symboles et caractères qu'on le souhaite.
Ainsi, lorsque l'on copie du texte à l'intérieur et à l'extérieur de programmes qui utilisent un jeu de caractères différent (comme celui de Microsoft), le jeu de caractères doit être entièrement ré-encodé et converti, un processus traditionnellement connu sous le nom de "conversion". iconv
Il existe cependant des dizaines d'implémentations de cette méthode.
2. Caractères combinés Unicode
Pour compliquer le problème des encodages, la norme Unicode a évolué au fil des ans et s'est rendu compte qu'afin de limiter le nombre de caractères uniques à des millions, plutôt qu'à des milliards, il serait préférable que certains caractères soient des "caractères combinés", c'est-à-dire des caractères qui modifient le précédent de manière régulière. De cette manière, il n'est pas nécessaire de créer une entrée distincte pour chaque lettre avec chaque variante d'accent, il suffit d'ajouter un caractère d'accent "partagé" au caractère original. Mais cela n'a pas toujours été fait de cette manière, il existe donc plusieurs façons de produire le même symbole. Le vôtre en est le parfait exemple.
Nous commençons par le symbole LETTRE MINUSCULE LATINE I (U+0069) :
i
Maintenant, quand vous voulez ajouter l'accent aigu, Microsoft remplace avec
LETTRE MINUSCULE LATINE I AVEC ACCENT AIGU (U+00ED) :
í
Mais Apple, au lieu de cela, ajoute un deuxième caractère, COMBINANT L'ACCENT AIGU (U+0301) :
Vous pouvez le faire vous-même (c'est là que le visualiseur de caractères entre en jeu). Tapez simplement un i
puis chercher combining acute
dans le Visualiseur de caractères, double-cliquez sur le symbole, et voilà :
i
Ce qui est, en fait complètement différent que le premier symbole, ci-dessus. Il est LETTRE MINUSCULE LATINE I (U+0069) suivi de COMBINANT L'ACCENT AIGU (U+0301). Copiez et collez-les dans le Visualiseur de caractères, et vous verrez ce que je veux dire.
Oui, les deux représentent visuellement le même symbole. Mais si, d'une manière ou d'une autre (généralement en même temps que la conversion du jeu de caractères), un processus UTF-8 ajoute le caractère de combinaison, mais que le caractère original pré-combiné est conservé ? En d'autres termes, que se passe-t-il lorsque l'approche des "symboles combinés" est d'une manière ou d'une autre ajouté à l'ancienne version, plutôt que le remplacer ? Eh bien, l'accent de "combinaison de caractères" voudra toujours faire son travail.
Donc, quand on combine LETTRE MINUSCULE LATINE I AVEC ACCENT AIGU (U+00ED) avec COMBINANT L'ACCENT AIGU (U+0301) :
í
Et voilà, vous l'avez.
Il existe une réponse très célèbre de Stack Overflow qui montre jusqu'où cela peut aller.
Quelques lectures légères :