Comprendre les jeux de caractères

Ce billet s'adresse à tous ceux qui souhaitent y voir un peu plus clair dans les jeux de caractères. Il s'agit d'une vision de la chose censée vous faire prendre conscience de l'utilité des jeux de caractères, ainsi que de la manière de les utiliser.

Les problèmes fréquents

Lorsque l'on traîne un peu sur des forums de conception web, on voit très souvent revenir les mêmes questions concernant les « caractères qui s'affichent mal ». Beaucoup de webmasters écrivent leur page et lors de la publication, tous leurs accents sont remplacés par des objets étranges (point d'interrogation, « Ã® », ou autre...).

Bien souvent, les solutions proposées consistent à effectuer 2 ou 3 manipulations dans l'éditeur du webmaster, ou encore à lui faire modifier son code HTML.

Si comme moi vous en avez assez de ces solutions trop directives, que vous souhaitez comprendre réellement d'où vient votre problème et comment le résoudre, alors suivez-moi dans l'exploration des profondeurs du monde des jeux de caractères.

Ce qui ne va pas

Vous êtes en train d'écrire une page web, jusque là vous suivez. Mais comprenez-vous réellement cette chose si naturelle que vous faites tous les jours ? Commençons par résumer vos tâche :

  • vous lancez la création d'une nouvelle page dans votre éditeur ;
  • vous ajoutez vos balises HTML et votre contenu ;
  • vous enregistrez votre fichier ;
  • vous publiez votre contenu.

Aïe, et ça ne fonctionne pas, vos accents ont toujours disparu. Et bien contrairement à ce que vous pensez, l'erreur vient en fait de la partie qui vous semble pourtant la plus simple : enregistrer votre fichier.

Cette tâche que vous effectuez depuis des années ne devrait pas être si compliquée, il ne s'agit finalement que d'un peu de texte à sauvegarder sur votre disque dur.

Et voilà, vous faites vous aussi l'erreur la plus monumentale et la plus vieille de l'informatique. Et oui, du texte, ça n'existe pas en informatique.

Revenons aux fondements

La machine que vous utilisez en ce moment n'a aucune notion de texte. Tout ce qu'elle peut comprendre, ce sont les octets. Que cette machine soit un Mac, un PC, sous Windows, Linux, Mac OS X ou autre, cela ne change en rien le fait qu'elle ne sait traiter que des octets.

Cette fameuse tâche d'enregistrer votre fichier ne revient donc pas à sauvegarder un peu de texte sur votre disque dur mais un peu d'octets.

Ah vous voyez où se trouve la difficulté ? Tout à coup, on ne parle plus de la même chose. Le texte, bah c'est du texte, des caractères dont des lettres, des chiffres, de la ponctuation... Les octets, ce sont des nombres. Et plus précisément des nombres dont la valeur peut aller de 0 à 255. Alors il est passé où votre texte ?

Champolion !

Ce grand explorateur arrive à votre rescousse. Vous avez du texte à enregistrer ? Vous ne pouvez enregistrer que des octets ?

Pas de problème, j'ai la solution : la Pierre de Rosette !

Bah oui, quand vous avez 2 langages différents, d'un côté des caractères, de l'autre des nombres, le plus simple est d'utiliser une table de concordance pour traduire de l'un vers l'autre et inversement.

Messieurs, mesdames, veuillez sans plus attendre accueillir sous un tonnerre d'applaudissements la Pierre de Rosette iso-8859-1 et la Pierre de Rosette iso-8859-15 !

Voilà ce qu'est un jeu de caractères. Il s'agit d'une table permettant de faire la traduction d'un caractères vers des octets et inversement.

La pilule rouge

Maintenant vous savez.

À chaque fois que du texte s'affiche sur votre écran, c'est qu'une table de conversion a été utilisée pour obtenir les caractères à partir des octets. À chaque fois que vous enregistrez du texte sur un support informatique, c'est qu'une table de conversion a été utilisée pour obtenir les octets à partir des caractères.

Autant vous dire que si vous n'utilisez pas la même table pour enregistrer et pour afficher, c'est là que les problèmes surviennent. Et c'est pour ça qu'il est fondamental de préciser avec chaque fichier texte la table avec laquelle il a été enregistré.

Sur le web, c'est comment ?

Lorsque vous écrivez une page web, il faut préciser le jeu de caractères de votre page, soit dans les options HTTP envoyés par votre serveur, soit dans votre fichier HTML avec une balise <meta>.

Il vous faudra toujours préciser le jeu de caractères avec lequel vous avez enregistré le fichier dans votre logiciel, et c'est là que les choses peuvent se complexifier.

La notion que vous venez de comprendre sur les jeux de caractères, 80% des dévelopeurs ne la connaissent pas. Et il y a de grandes chances que les auteurs de votre logiciel soit dans cette majorité. Votre logiciel ne permet donc pas de spécifier le jeu de caractères utilisé à l'enregistrement de votre fichier.

Si c'est votre cas, 2 solutions :

  • vous êtes sur Windows, et il y a de grandes chances que le jeu de caractères utilisé soit celui par défaut de Windows, c'est à dire windows-1252 très souvent confondu avec iso-8859-1 pour leur similitude ;
  • vous n'êtes pas sur Windows et vous ne pouvez pas prévoir réellement le jeu de caractères utilisé, une seule solution alors : changer d'éditeur.

Pour aller plus loin

Les exemples de jeux de caractères que j'ai pris sont simples, car ils associent un caractère avec un octet. Cela les limite forcément à 255 caractères enregistrables (en théorie, en pratique certaines valeurs sont réservées). En utilisant de tels jeux de caractères, vous devrez donc vous limiter au seuls caractères situés dans la table, les autres ne seront pas enregistrables directement dans le fichier (on pourra passer par le système des entités en HTML mais c'est un autre sujet).

D'autres jeux de caractères comme UTF-8 peuvent définir beaucoup plus de caractères en associant un caractère à un nombre variable d'octets, entre 1 et 4. UTF-8 permet par exemple d'enregistrer dans son document tous les caractères définit par le standard Unicode qui liste tous les caractères de cette planète.

Ces jeux de caractères sont plus lourds en taille puisque certaines caractères peuvent faire plus de 1 octet, mais sont forcément plus puissants puisque vous n'aurez plus à passer par le système des entités.

Pour continuer à vivre une vie normale :-)

Vous connaissez enfin la plus vieille et la plus complexe des problématiques du web et de la communication informatique. Je vous conseille de vous documenter sur les différents jeux de caractères (ou charsets en anglais) utilisés aujourd'hui. Et vous devriez alors être à même de comprendre tous les problèmes de jeux de caractères qui pourraient se présenter, et même éventuellement les résoudre ! Quelle merveille !

Et voilà, vous êtes maintenant des pros des jeux de caractères. On dit merci à qui ?

Haut de page