Steve Frécinaux

Confusion

Quand on parle de jeu de caractères, il y a en fait trois concepts, trois niveaux d’abstraction, qui interviennent, et qu’il faut bien distinguer :

  • le jeu de caractères (charset), qui est en fait l’ensemble de tous les caractères disponibles. En HTML ou en XML, ce jeu est le jeu déterminé par le standard Unicode, qui est en fait un surensemble théorique de tous les autres jeux de caractères existants. Ce jeu représente le plus grand niveau d’abstraction : un caractère est désigné par lui-même, tout simplement.
  • le jeu de caractères codé (coded charset), qui est équivalent au jeu de caractères, dont un numéro aurait été attribué à chacun des éléments. Ainsi un “e” dans Unicode est désigné par le numéro 101. Il s’agit du second niveau d’abstraction.
  • le codage de caractère (character encoding, je ne suis pas certain que ma traduction soit la plus pertinente) est quant à lui la représentation binaire du jeu codé. À un même jeu codé (par exemple Unicode) peut correspondre plusieurs codages (UTF-8, UTF-16, etc.).

Pour la majorité des jeux courants (comme par exemple, l’ISO-8859-1), un seul codage est utilisé pour représenter le jeu, ce qui explique que le codage soit souvent abusivement appelé également jeu de caractères (c’est le cas par exemple dans mon article, ou l’amalgame entre encoding et charset sous le nom jeu de caractère est bel et bien un abus de langage).

Le jeu de caractère, enfin, peut n’avoir qu’un rapport indirect avec le codage utilisé pour le fichier. Ainsi en est-il pour le HTML, par exemple. Le jeu de caractère est alors toujours Unicode. Cependant, le codage peut varier, comme expliqué dans l’article. Le jeu représentable en binaire est alors limité par le codage (par exemple, ISO-8859-1), mais les autres caractères sont néanmoins accessibles via les entités numériques. Ce phénomène que j’ai bien mal résumé ici est néanmoins très bien expliqué par Karl.

Toute la vérité est également expliquée sur ce didacticiel du groupe I18N du W3C.