Jeux de caractères et types d'encodage (UTF-8...)

Qu'est ce qu'un jeu de caractères ?

Un jeu de caractère est un ensemble bien défini de caractères. Le plus simple est l'ASCII (liste de caractères de base US). Le plus complet et moderne est l'Unicode.

Qu'est ce qu'un encodage de caractères ?

L'encodage d'un jeu de caractères spécifie comment ces caractères seront effectivement stockés sous forme d'octets compréhensibles par un ordinateur. Pour un jeu de caractères donné, il y a souvent le choix entre de nombreux différents encodages, chacun avec ses avantages et ses inconvénients.

Par exemple voici 2 encodages très utilisés pour le jeu de caractère Unicode:

  • UTF-8
    Pour celui-ci les caractères ASCII de base sont encodés sur un octet (8 bits). Les autres sur plusieurs. Les avantages de ce format sont notamment qu'il est compact (s'il y a beaucoup de caractères ASCII de base) et qu'il est lisible facilement avec n'importe quel éditeur de texte.
  • UTF-16
    Pour celui-ci tous les caractères sont codés sur 2 octets (16 bits). Il est donc moins compacte que l'UTF-8 pour du texte roman. Mais un programme informatique gèrera plus rapidement cet encodage justement parce que chaque caractère fait exactement 2 octets (il est par exemple facile de calculer la longueur d'une chaine de caractères à partir de la place qu'elle occupe en mémoire)

Quel jeu de caractères et encodage choisir pour mon site Web ?

Si vous avez le choix, alors nous vous conseillons d'utiliser le jeu de caractère Unicode avec l'encodage UTF-8. Cet encodage est bien géré par tous les navigateurs et permet de gérer toutes les langues possibles (français, anglais, japonais...)

Si vous avez un site statique, alors il faut vous assurer que vos fichiers HTML sont sauvegardés en UTF-8 (la possibilité existe avec tous les éditeurs texte modernes)

Si vous avez un site dynamique intégrant plusieurs technologies (bases de données, templates HTML, XML, langages tels que PHP, Ruby, ASP...), alors il faut vous assurer que vous maitrisez complètement votre chaine de conversion de caractères à travers chaque brique technologique. Ce n'est pas toujours facile, mais c'est essentiel pour ne pas avoir de caractères corrompus (garbage) lors de l'affichage final dans le navigateur.

Comment appliquer ce charset à mon site Web ?

Imaginons que vous ayez choisi l'UTF-8 pour votre site statique. Tous vos fichiers HTML ont été sauvegardés au format UTF-8, parfait. Maintenant la question est: comment le navigateur qui interprétera le fichier HTML saura quel encodage est utilisé ? Voici la logique que la plupart des navigateurs utilisent:

  • le navigateur va d'abord regarder si le serveur Web qui lui a fourni la page lui a donnée l'information de charset. Le serveur peut indiquer cette information dans le champs 'Content-Type' de sa réponse HTTP (mais il n'est pas obligé).
    • text/html; charset=UTF-8: ici le serveur indique que c'est un fichier HTML encodé en UTF-8
    • text/html : ici le serveur ne donne pas l'information, le navigateur devra trouver un autre moyen pour l'obtenir.
  • sinon le navigateur regarde si le code HTML lui-même contient l'information d'encodage. En effet un web designer peut donner cette information grâce à un meta tag tel que celui-ci:
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  • sinon le navigateur partira du principe que l'encodage utilisé est le iso-8859-1.

Comment diagnostiquer et résoudre des problèmes de charset ?

Si l'affichage de certains caractères (accentués notamment) est corrompu dans le navigateur, alors il ne faut surtout pas essayer de "bidouiller" et faire une conversion hasardeuse de caractère. Cela risque d'aggraver le problème. Au contraire, il faut analyser complètement le problème pour le résoudre proprement:

  • vérifiez votre plateforme Web en vous posant la question pour chaque brique "quel est l'encodage d'entrée ?" et "quel est l'encodage de sortie ?". Au besoin vous pouvez utiliser des fonctions de conversion (iconv en PHP par exemple), uniquement si vous avez clairement identifié le problème.
  • vérifiez les étapes décrites dans le paragraphe précédent pour vous assurer que votre serveur Web et votre page HTML donnent l'information correcte de votre encodage.
  • si votre page Web est en XHTML (c'est à dire que c'est en fait de l'XML), alors il vous faut respecter les règles de l'XML pour indiquer l'encodage utilisé par votre page. C'est fait généralement dans la première ligne du fichier xml:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    Si aucun encoding n'est indiqué, alors un parseur HTML en déduira que c'est de l'UTF-8.
  • vérifiez que vos fichiers HTML, vos templates, vos fichiers de localisation ou des chaines de caractères hardcodées sont bien à l'encodage désiré.

Bien entendu, une analyse de votre page avec ZinaWeb vous aidera à cerner les problèmes éventuels.

L'outil gratuit ZinaWeb pour analyser le charset de vos pages


Analyser gratuitement le charset de votre page :
ANALYSER


Pour lancer l'analyse ZinaWeb, il vous suffit de saisir le lien vers votre page dans la zone ci-dessus et de cliquer sur le bouton Analyser. Vous pourrez alors accéder aux différentes pages du rapport, en particulier celle sur les charset.

Pour en savoir plus...

Si cet article vous a donné envie de vous documenter davantage sur le sujet des jeux de caractères, voici quelques liens utiles :

D'autres articles de ZinaWeb dans la rubrique Référencement et Technique peuvent vous être utiles bien sur.