« Ésope reste ici et se repose » est un palindrome français classique : sans les espaces et sans distinguer majuscules et minuscules, la phrase se lit de façon identique dans les deux sens. Pour du français sans accents, inverser caractère par caractère fonctionne parfaitement — mais dès qu'un accent entre en jeu, tout dépend de la façon dont le caractère a été encodé.
Qu'est-ce qu'un cluster de graphèmes
Ce qu'une personne perçoit comme « un caractère visible » est parfois composé de plusieurs points de code en Unicode — un emoji de famille (👨👩👧), par exemple, est en réalité plusieurs emojis distincts reliés par un caractère spécial de jonction de largeur nulle. Une telle combinaison est appelée cluster de graphèmes.
Pourquoi une inversion naïve casse tout
Si l'on inverse une chaîne point de code par point de code plutôt que cluster de graphèmes par cluster, le joint se retrouve au mauvais endroit, et au lieu d'un seul emoji visible, on obtient un ensemble de caractères séparés et sans lien — souvent affiché comme des carrés « cassés » ou des emojis aléatoires à la place de l'original.
Une inversion correcte
Une implémentation correcte découpe d'abord la chaîne en clusters de graphèmes (en tenant compte des jonctions, modificateurs et caractères combinants), et seulement ensuite inverse l'ordre de ces clusters, pas des points de code individuels qu'ils contiennent.
À quoi ça sert
- Vérifier un palindrome ou créer un effet de texte « miroir ».
- Démontrer ou diagnostiquer un bug de gestion d'Unicode dans du code.
- Des tâches récréatives ou pédagogiques nécessitant une inversion correcte d'un texte contenant des emojis.
Les signes diacritiques combinants
Le caractère « é », écrit comme la lettre de base « e » plus un accent aigu combinant séparé (au lieu d'un seul caractère précomposé), représente deux points de code liés par leur ordre : l'accent vient toujours immédiatement après le caractère auquel il se rapporte. Une inversion naïve par point de code les échange, et l'accent se « détache » de sa lettre pour s'attacher au caractère voisin — une inversion correcte doit garder ensemble le caractère de base et ses signes combinants comme une seule unité.