En dehors de la norme Unicode, un caractère est une unité individuelle de texte composée d'un ou plusieurs graphèmes . Ce que la norme Unicode définit comme "caractères" est en fait un mélange de graphèmes et de caractères. Unicode fournit des règles pour l'interprétation des graphèmes juxtaposés en tant que caractères individuels.
Un point de code Unicode est un numéro unique attribué à chaque caractère Unicode (qui est soit un caractère soit un graphème).
Malheureusement, les règles Unicode permettent à certains graphèmes juxtaposés d'être interprétés comme d'autres graphèmes qui ont déjà leurs propres points de code ( formes précomposées ). Cela signifie qu'il existe plusieurs façons en Unicode de représenter un caractère. La normalisation Unicode résout ce problème.
Un glyphe est la représentation visuelle d'un personnage. Une police fournit un ensemble de glyphes pour un certain ensemble de caractères (pas des caractères Unicode). Pour chaque caractère, il existe un nombre infini de glyphes possibles.
Une réponse à Mark Amery
Premièrement, comme je l'ai dit, il y a un nombre infini de glyphes possibles pour chaque caractère donc non, un caractère n'est pas "toujours représenté par un seul glyphe". Unicode ne se préoccupe pas beaucoup des glyphes, et les choses qu'il définit dans ses graphiques de code ne sont certainement pas des glyphes. Le problème est qu'ils ne sont pas tous non plus des personnages. Alors que sont-ils?
Quelle est la plus grande entité, le graphème ou le caractère? Comment appelle-t-on ces éléments graphiques dans le texte qui ne sont pas des lettres ou de la ponctuation? Un terme qui vient rapidement à l'esprit est "graphème". C'est un mot qui évoque précisément l'idée "d'une unité graphique dans un texte". J'offre cette définition: un graphème est le plus petit composant distinct dans un texte écrit .
On pourrait aller dans l'autre sens et dire que les graphèmes sont composés de caractères, mais alors ils seraient appelés "graphèmes chinois", et tous ces bits et morceaux de graphèmes chinois devraient être appelés "caractères" à la place. Cependant, tout est à l'envers. Les graphèmes sont les petits morceaux distincts. Les personnages sont plus développés. L'expression «les glyphes sont composables» serait mieux énoncée dans le contexte d'Unicode car «les caractères sont composables».
Unicode définit des caractères mais il définit également des graphèmes qui doivent être composés avec d'autres graphèmes ou caractères. Ces monstruosités que vous avez composées en sont un bel exemple. S'ils comprennent peut-être qu'ils obtiendront leurs propres points de code dans une version ultérieure d'Unicode;)
Il y a un élément récursif dans tout cela. À des niveaux plus élevés, les graphèmes deviennent des caractères deviennent des graphèmes, mais ce sont des graphèmes tout en bas.
Une réponse à TS
Le chapitre 1 de la norme stipule: "Le codage des caractères Unicode traite les caractères alphabétiques, les caractères idéographiques et les symboles de manière équivalente, ce qui signifie qu'ils peuvent être utilisés dans n'importe quel mélange et avec la même facilité". Compte tenu de cette affirmation, nous devons nous préparer à une certaine confusion des termes de la norme. Parfois, la terminologie appropriée ne devient claire que rétrospectivement à mesure qu'une norme se développe.
Il arrive souvent dans les définitions formelles d'une langue que deux choses fondamentales soient définies l'une par rapport à l'autre. Par exemple, en
XML, un élément est défini comme une balise de départ éventuellement suivie d'un contenu, suivie d'une balise de fin. Le contenu est défini à son tour comme un élément, des données de caractère ou quelques autres choses possibles. Un modèle de définitions autoréférentielles est également implicite dans la norme Unicode:
Un graphème est un point de code ou un caractère.
Un caractère est composé d'une séquence d'un ou plusieurs graphèmes.
Lorsqu'il est confronté pour la première fois à ces deux définitions, le lecteur peut s'opposer à la première définition au motif qu'un point de code est un caractère, mais ce n'est pas toujours vrai. Une séquence de deux points de code code parfois un seul point de code sous
normalisation , et ce point de code codé représente le caractère, comme illustré dans la
figure 2.7 . Séquences de points de code qui codent d'autres points de code. Cela devient un peu délicat et nous n'avons même pas atteint la couche où les schémas de codage de caractères tels que UTF-8 sont utilisés pour coder des points de code en séquences d'octets.
Dans certains contextes, par exemple, un article scientifique sur les
signes diacritiques et une partie individuelle d'un personnage peuvent apparaître seuls dans le texte. Dans ce contexte, la partie de caractère individuelle pourrait être considérée comme un caractère, il est donc logique que la norme Unicode reste également flexible.
Comme l'a souligné Mark Avery, un personnage peut être composé en une chose plus complexe. Autrement dit, chaque caractère peut servir de graphème si on le souhaite. Le résultat final de toute composition est une chose que "l'utilisateur considère comme un personnage". Il ne semble pas y avoir de réelle résistance, que ce soit dans la norme ou dans cette discussion, à l'idée qu'au plus haut niveau, il y a ces choses dans le texte que l'utilisateur considère comme des personnages individuels. Pour éviter de surcharger ce terme, on peut utiliser "graphème" dans tous les cas où l'on veut se référer aux parties utilisées pour composer un caractère.
Parfois, la norme Unicode est partout avec sa terminologie. Par exemple, le chapitre 3
définit UTF-8 comme une «forme d'encodage» alors que le glossaire définit «forme d'encodage» comme autre chose, et UTF-8 comme un «schéma d'encodage de caractères». Un autre exemple est "Grapheme_Base" et "Grapheme_Extend", qui sont reconnus comme des erreurs mais qui persistent car les purger est un peu une tâche. Il reste encore du travail à faire pour resserrer la terminologie employée par la norme.
La proposition d'ajout de COMBINING GRAPHEME JOINER s'est trompée lorsqu'elle a déclaré que "les graphèmes sont des séquences d'un ou plusieurs caractères codés qui correspondent à ce que les utilisateurs considèrent comme des caractères." Il devrait plutôt lire: "Une séquence d'un ou plusieurs graphèmes compose ce que l'utilisateur considère comme un caractère." Ensuite, il pourrait utiliser le terme «séquence de graphèmes» distinctement du terme «séquence de caractères». Les deux termes sont utiles. «séquence de graphèmes» implique proprement le processus de construction d'un personnage à partir de morceaux plus petits. "séquence de caractères" signifie ce que nous entendons tous généralement par l'intuition: "Une séquence de choses que l'utilisateur considère comme des caractères."
Parfois un programmeur veut vraiment opérer au niveau des séquences de graphèmes, donc des mécanismes pour inspecter et manipuler ces séquences devraient être disponibles, mais généralement, lors du traitement de texte, il suffit d'opérer sur des "séquences de caractères" (ce à quoi l'utilisateur pense en tant que personnage) et laissez le système gérer les détails de niveau inférieur.
Dans tous les cas abordés jusqu'à présent dans cette discussion, il est plus propre d'utiliser «graphème» pour désigner les composants indivisibles et «caractère» pour désigner l'entité composée. Cet usage reflète également mieux les significations établies de longue date des deux termes.