Choisir et appliquer un encodage de caractères

Questions

Quel encodage de caractères devrais-je utiliser ? Comment l’appliquer à mon contenu ?

Un contenu se compose d’une séquence de caractères. Ces caractères représentent des lettres de l’alphabet, des signes de ponctuation, etc. Mais ce contenu est stocké dans l’ordinateur sous la forme d’une séquence d’octets, c’est-à-dire de valeurs numériques. Parfois, il faut plus d’un octet pour représenter un caractère. Comme les codes utilisés en espionage, la manière dont la séquence d’octets est convertie en caractères dépend de la clé qui a été utilisée pour encoder le texte. Dans notre contexte, la clé est appelée encodage de caractères.

Cet article vous propose des conseils simples pour choisir l’encodage de caractères adéquat et l’appliquer à votre contenu, c’est-à-dire produire un document dans cet encodage.

Si vous avez besoin de mieux comprendre en quoi consistent les caractères et les encodages de caractères, consultez l’article Les encodages de caractères pour les débutants.

Réponse courte

Choisissez l’encodage UTF-8 pour tous vos contenus et envisagez de convertir en UTF-8 tous vos contenus créés dans d’autres encodages.

Si vous ne pouvez vraiment pas utiliser un encodage Unicode, vérifiez que la plupart des navigateurs sont compatibles avec l’encodage que vous avez choisi, et que cet encodage ne figure pas sur la liste des encodages à éviter d’après les spécifications récentes.

Déterminez si vous devrez prendre en compte la configuration HTTP côté serveur dans votre décision.

En plus de déclarer l’encodage du document à l’intérieur de celui-ci ou sur le serveur, vous devrez enregistrer votre texte dans cet encodage pour l’appliquer à votre contenu.

Les développeurs et développeuses doivent aussi s’assurer que les différentes composantes du système peuvent échanger entre elles.

Réponse détaillée

Appliquer un encodage à votre contenu

Lorsque vous créez du contenu, vous devriez déclarer l’encodage de caractères de vos pages à l’aide de l’une des méthodes décrites dans notre article Déclarer un encodage de caractères en HTML.

Toutefois, il est important de comprendre que le simple fait de déclarer un encodage à l’intérieur d’un document ou sur un serveur ne modifiera pas les octets ; vous devrez enregistrer votre texte dans cet encodage pour l’appliquer à votre contenu. (La déclaration aide simplement le navigateur à interpréter les séquences d’octets dans lesquelles le texte est stocké.)

Si nécessaire, définissez UTF-8 comme encodage par défaut des nouveaux documents dans votre éditeur de texte. L’image ci-dessous montre comment procéder dans les préférences d’un éditeur comme Dreamweaver.

Les préférences de Dreamweaver relatives aux nouveaux documents vous permettent de préciser un encodage par défaut.

Vous pourriez aussi avoir besoin de vérifier que votre serveur envoie les documents avec les bonnes déclarations HTTP, car celles-ci prévalent sur les informations figurant à l’intérieur du document (voir ci-dessous).

Les développeurs et développeuses doivent aussi s’assurer que les différentes composantes du système peuvent échanger entre elles. Les pages Web doivent pouvoir échanger sans heurt avec les scripts backend, les bases de données, et ainsi de suite. Bien sûr, eux aussi fonctionnent mieux avec UTF-8. Vous trouverez une liste détaillée des choses à prendre en compte dans notre guide Migrer vers Unicode.

Pourquoi utiliser UTF-8 ?

Une page HTML ne peut avoir qu’un seul encodage. Vous ne pouvez pas choisir différents encodages pour différentes parties d’un document.

Un encodage basé sur Unicode, comme UTF-8, répond aux besoins de nombreuses langues. Il est également compatible avec les pages et les formulaires qui combinent plusieurs langues. De plus, son utilisation élimine le besoin de logique côté serveur pour déterminer individuellement l’encodage de caractères de chaque page envoyée ou de chaque soumission de formulaire entrante. Ainsi, elle réduit considérablement la complexité d’un site ou d’une application multilingue.

Un encodage Unicode permet aussi d’utiliser sur une même page un nombre de langues beaucoup plus important que tout autre encodage.

Aujourd’hui, les obstacles à l’utilisation d’Unicode sont très rares. En janvier 2012, Google a d’ailleurs annoncé que plus de 60 % du Web (d’après un échantillon de plusieurs milliards de pages) utilisait désormais UTF-8. Si on y ajoute le nombre de pages web utilisant uniquement ASCII (qui est un sous-ensemble d’UTF-8), ce pourcentage passe à environ 80 %.

Il existe trois encodages de caractères Unicode différents : UTF-8, UTF-16 et UTF-32. Parmi les trois, seul UTF-8 doit être utilisé pour les contenus Web. Comme l’indique la spécification HTML5, « nous recommandons l’utilisation d’UTF-8 aux créateurs et créatrices de contenus. Les systèmes de vérification de la conformité peuvent leur déconseiller d’utiliser d’autres encondages. Les outils de création devraient utiliser par défaut l’encodage UTF-8 pour les nouveaux documents. »

Remarque : en UTF-8, tous les caractères ASCII utilisent exactement les mêmes octets qu’un encodage ASCII, ce qui facilite souvent l’interopérabilité et la compatibilité descendante.

Prise en compte de l’en-tête HTTP

Toute déclaration d’encodage de caractères effectuée dans l’en-tête HTTP prévaut sur les déclarations présentes sur les pages individuelles. Si l’en-tête HTTP déclare un encodage différent de celui que vous souhaitez utiliser pour votre contenu, cela posera problème, sauf si vous pouvez modifier les paramètres du serveur.

Il est possible que vous n’ayez aucun contrôle sur les déclarations qui accompagnent l’en-tête HTTP et que vous deviez demander de l’aide aux personnes qui gèrent le serveur. Toutefois, si vous avez un accès limité aux fichiers de configuration du serveur ou générez des pages à l’aide de langages de script, vous aurez peut-être des moyens de résoudre les problèmes sur le serveur. Par exemple, consultez l’article Configurer le paramètre d’encodage HTTP pour plus d’informations sur la manière de modifier les informations d’encodage, que ce soit en local pour un ensemble de fichiers sur un serveur, ou pour du contenu généré à l’aide d’un langage de script.

Généralement, avant de procéder, vous devez vérifier que l’en-tête HTTP déclare bien l’encodage de caractères. Pour découvrir quel encodage de caractères (le cas échéant) est spécifié dans l’en-tête HTTP, vous pourriez utiliser le Vérificateur d’internationalisation du W3C. Sinon, l’article Vérifier les en-têtes HTTP renvoie vers d’autres outils qui permettent de vérifier les informations d’encodage transmises par le serveur.

Informations complémentaires

Cette section comporte des informations dont vous ne devriez pas avoir besoin, mais que nous avons incluses à des fins d’exhaustivité.

Et si je ne peux pas utiliser UTF-8 ?

Si vous ne pouvez vraiment pas éviter l’utilisation d’un encodage de caractères autre qu’UTF-8, vous devrez choisir parmi un ensemble limité de noms d’encodages pour garantir la meilleure interopérabilité et la plus longue durée possible de lisibilité de votre contenu, et pour limiter les vulnérabilités de sécurité.

Encore récemment, vous deviez consulter le registre de l’IANA pour trouver les noms d’encodages. Ce registre inclut souvent plusieurs noms pour un même encodage. Dans ce cas, vous devriez utiliser le nom figurant dans la colonne « Preferred ».

La nouvelle spécification Encodage fournit désormais une liste de noms qui ont été testés dans des navigateurs en conditions réelles. Vous pouvez trouver cette liste dans le tableau de la section intitulée Names and labels. Mieux vaut utiliser les noms indiqués dans la colonne de gauche de ce tableau.

Remarque : la présence d’un nom dans l’une de ces sources ne signifie pas forcément que cet encodage peut être utilisé. Consultez la section suivante pour découvrir les encodages à éviter.

Encodages à éviter

La spécification HTML5 indique un certain nombre d’encodages à éviter.

Les documents ne doivent utiliser ni les encodages JIS_C6226-1983, JIS_X0212-1990, HZ-GB-2312 et JOHAB (jeu de caractères Windows-1361) ni les encodages basés sur ISO-2022 ou EBCDIC. En effet, ces encodages permettent à des points de code ASCII de représenter des caractères non ASCII, ce qui présente une menace pour la sécurité.

Les documents ne doivent pas non plus utiliser les encodages CESU-8, UTF-7, BOCU-1 et SCSU, car ils n’ont jamais été conçus pour les contenus Web. La spécification HTML5 interdit aux navigateurs de les reconnaitre.

De plus, la spécification décourage fortement l’utilisation de l’encodage UTF-16, et particulièrement celle d’UTF-32.

Vous devriez aussi éviter les encodages de caractères listés dans la spécification Encoding. Ceux-ci incluent les encodages Big5 et EUC-JP, qui présentent des problèmes d’interopérabilité. L’encodage hébreu ISO-8859-8, pour le texte ordonné de manière visuelle, est aussi à éviter. Mieux vaut utiliser un encodage compatible avec le texte ordonné de manière logique (soit UTF-8 ou, à défaut, ISO-8859-8-i).

L’encodage replacement, mentionné dans la spécification Encoding, n’est pas un encodage à proprement parler. Il s’agit d’une solution de repli qui associe chaque octet au point de code Unicode U+FFFD CARACTÈRE DE REMPLACEMENT. Bien entendu, il est inutile de transmettre des données dans cet « encodage ».

L’encodage x-user-defined est un encodage à un seul octet dont la moitié inférieure est ASCII et dont la moitié supérieure est associé à la zone à usage privé. Comme la zone à usage privé de façon générale, mieux vaut éviter l’utilisation de cet encodage sur l’Internet public, car il porte atteinte à l’interopérabilité et à l’utilisation à long terme.