Encodages de caractères pour débutants

Question

Qu’est-ce que l’encodage de caractères et pourquoi m’y intéresser ?

Answer

Premièrement, pourquoi m’y intéresser ?

Si vous utilisez les caractères autres que les caractères de base nécessaires en anglais, les autres pourraient ne pas pouvoir lire votre texte, à moins que vous n’indiquiez quel codage de caractères vous utilisez.

Par exemple, vous voulez que votre texte ressemble à cela :

mojibake1.gif

mais il peut en fait se présenter comme cela :

mojibake2.gif

Non seulement les informations d’encodage inadéquates rendent la lisibilité du texte affiché difficile, mais elles peuvent empêcher vos données d’être trouvées par un moteur de recherche d’être traitées de plusieurs autres façons avec fiabilité.

Qu’est-ce que l’encodage de caractères ?

Dans un texte, les mots et les phrases sont créés à partir de caractères. La lettre latine á, l’idéogramme chinois ou le caractère Devanagari sont des exemples de caractères.

Les caractères sont regroupés dans un registre de caractères (également appelé répertoire), appelé ensuite registre de caractères codés lorsqu’un chiffre précis est attribué à chaque caractère, nommé point de code. Ces points de code sont représentés dans l’ordinateur par un octet ou plus.

L’encodage de caractères est la clé qui structure les points de code en octets dans la mémoire de l’ordinateur, puis lit les octets à nouveau en points de code.

Globalement, vous pouvez vous imaginer cela en supposant que tous les caractères sont stockés dans des ordinateurs qui utilisent un code, comme les chiffres utilisés dans l’espionnage. Un encodage de caractères fournit une clé pour déverrouiller (c.-à-d. décrypter) le code. Il s’agit d’un registre de structures entre les octets représentant les chiffres dans l’ordinateur et les caractères dans le répertoire des caractères codés. Sans la clé, les données sont inutilisables.

Le terme charset prêtant à confusion est souvent utilisé pour faire référence à ce qui en réalité désigne des encodages de caractères. Vous devriez connaître cet usage, mais tenez-vous-en au terme encodages de caractères chaque fois que c’est possible.

Malheureusement, il existe beaucoup de répertoires et d’encodages de caractères différents, c’est-à-dire différentes façons d’élaborer une structure parmi les octets, les points de code et les caractères. La section Informations supplémentaires fournit un peu plus de détails pour les personnes intéressées.

La plupart du temps, cependant, vous n’aurez pas besoin de connaître ces détails. Vous devrez simplement vous assurer de prendre connaissance des conseils mentionnés dans la section En quoi cela me concerne-t-il ? ci-dessous.

Comment les polices s’intègrent-elles à cela ?

Une police consiste en un ensemble de définitions de glyphes, c’est-à-dire des formes définies utilisées pour afficher les caractères.

Une fois que votre application est parvenue à déterminer les caractères en jeu, elle consultera les glyphes de la police afin d’afficher ou d’imprimer ces caractères. (Bien sûr, si les informations d’encodage étaient erronées, l’application recherchera les glyphes correspondant aux mauvais caractères.)

Une police donnée correspondra en général à un répertoire unique de caractères ou, dans le cas d’un répertoire de caractères important comme l’Unicode, simplement à un sous-répertoire de l’ensemble des caractères du répertoire. Si votre police ne possède pas de glyphe correspondant un caractère précis, certaines applications rechercheront le caractère manquant dans les autres polices de votre système (ce qui voudra dire que le glyphe sera différent de ceux du texte en général, comme un défaut). Sinon, vous verrez apparaître un carré, un point d’interrogation ou un autre caractère à la place. Par exemple :

mojibake3.gif

En quoi cela me concerne-t-il ?

À titre d’auteur de contenu ou de développeur, vous devriez aujourd’hui toujours choisir l’encodage de caractère UTF-8 pour votre contenu ou vos données. Cet encodage Unicode est un bon choix, car vous pouvez utiliser un encodage unique pour composer avec presque tous les caractères que vous êtes susceptibles de rencontrer. Cela simplifie grandement la tâche. Utiliser l’Unicode dans votre système évite également de faire un suivi de différents encodages de caractères et de les convertir.

Les auteurs de contenu doivent trouver comment déclarer l’encodage de caractères utilisé pour le format du document avec lequel ils travaillent.

Sachez que simplement déclarer un encodage différent dans votre page ne modifiera pas les octets; vous devez aussi sauvegarder le texte dans cet encodage. Les auteurs de contenu doivent vérifier dans quel encodage leurs éditeurs ou programmes scripts sauvegardent le texte, et comment sauvegarder un texte en UTF-8. Vous pourriez aussi devoir vérifier que votre serveur prend en charge les documents utilisant les bonnes déclarations HTTP.

Les développeurs doivent s’assurer que les différentes composantes du système peuvent échanger entre elles, comprendre quels encodages de caractères sont utilisés et être compatibles avec les encodages et caractères indispensables. (Idéalement, vous devriez toujours utiliser l’UTF-8 et ne plus avoir ce problème.)

Les liens ci-dessous fournissent quelques lectures complémentaires sur ces sujets.

Information complémentaire

Cette section fournit un peu plus d’information sur la structure entre les octets, les points de code et les caractères pour les personnes intéressées. N’hésitez pas à aller à la section Pour approfondir.

Dans le répertoire de caractères codés appelé ISO 8859-1 (également connu comme Latin1), la valeur décimale du point de code pour la lettre é est 233. Cependant, en ISO 8859-5, le même point de code représente le caractère cyrillique щ.

Ces répertoires de caractères contiennent moins de 256 caractères et structurent directement les points de code en valeurs d’octets, de sorte qu’un point de code de valeur 233 est représenté par un seul octet de valeur 233. Remarquez que seul le contexte permet de savoir si cet octet représente soit un é soit un щ.

Il existe d’autres façons d’utiliser les caractères à partir d’une série de scripts. Par exemple, avec le répertoire de caractères Unicode vous pouvez représenter les deux caractères dans le même répertoire. En fait, l’Unicode contient probablement tous les caractères dont vous pourriez avoir besoin dans un unique répertoire. Alors que la lettre é est toujours représentée par la valeur du point de code 233, le caractère cyrillique щ a maintenant la valeur de point de code 1097.

D’un autre côté, 1097 est un nombre bien trop grand pour être représenté par un seul octet*. Donc si vous utilisez l’encodage de caractères appelé UTF-8 pour du texte Unicode, щ sera représenté par deux octets. Cependant, la valeur du point de code ne provient pas uniquement de la valeur des deux octets réunis, un décodage complexe étant nécessaire.

D’autres caractères Unicode se composent d’un, de trois ou de quatre octets dans le codage UTF-8.

De plus, prenez note que la lettre é est également représentée par deux octets en UTF-8 et non par l’unique octet utilisé en ISO 8859-1. (Seuls les caractères ASCII sont encodés avec un seul octet en UTF-8.)

L’UTF-8 est le moyen le plus largement utilisé pour représenter le texte Unicode dans les pages Web et vous devriez toujours utiliser l’UTF-8 pour créer vos pages Web et vos bases de données. Mais en principe, l’UTF-8 n’est qu’une façon parmi d’autres d’encoder les caractères Unicode. En d’autres mots, un seul point de code dans le répertoire de caractères Unicode peut en réalité être organisé en différentes séquences d’octets, selon l’encodage qui a été utilisé pour le document. Les points de code Unicode pourraient être organisés en octets en utilisant l’un ou l’autre des encodages appelés UTF-8, UTF-16 ou UTF-32. Le caractère Devanagari , dont le point de code est 2325 (915 en notation hexadécimale), sera représenté par deux octets en utilisant l’encodage UTF-16 (09 15), trois octets avec l’UTF-8 (E0 A4 95), ou quatre octets avec l’UTF-32 (00 00 09 15).

Il peut y avoir des difficultés autres que celles mentionnées dans cette section (comme l’ordre des octets et les séquences d’échappement), mais les informations présentées ici montrent pourquoi il est important que l’application avec laquelle vous travaillez reconnaisse le type d’encodage de caractères qui correspond à vos données et soit capable de l’utiliser.