Unicode et HTML

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Crystal Clear app fonts.svg Cette page contient des caractères spéciaux. Si certains caractères de cet article s’affichent mal (carrés vides, points d’interrogation, etc.), consultez la page d’aide Unicode.

Les liens entre Unicode et le HTML concernent d'une part le contenu des pages web, qui ne sont pas toutes en anglais et peuvent utiliser dans une même page des phrases dans différentes langues, et d'autre part la question de l'encodage des sources des fichiers HTML.

Aujourd'hui, la plupart des pages web sont encodées en Unicode[1].

Certains sites web donnent accès à des documents dans différentes langues, comme Google, Wikipédia, europa.eu ou le Quotidien du Peuple en ligne.

La relation entre Unicode et HTML tend à être un sujet difficile pour beaucoup de professionnels de l’informatique, d’auteurs de documents, et d’utilisateurs du web. La représentation exacte et appropriée du texte, dans les pages web, pour différentes langues et systèmes d’écriture est compliquée par les détails des protocoles d’encodage de caractères, de syntaxe de langage de balisage, de police de caractères, et par la diversité des niveaux de support offerts par les navigateurs web.

Caractères des documents HTML[modifier | modifier le code]

Les pages Web sont typiquement des documents HTML ou bien XHTML. Les deux types de documents consistent, à un niveau fondamental, de caractères, qui sont des unités de graphèmes et des « grapheme-like », indépendamment de comment ils sont stockés dans les systèmes de mémoire informatique et de réseaux informatique.

Un document HTML est une séquence de caractères Unicode.

Que le document soit en HTML ou en XHTML, lorsqu’il est stocké sur un système de fichier ou transmis sur un réseau, les caractères du document sont numérisés comme séquence de bit/octets d’après un codage de caractère particulier. Le codage peut être un des UCS Transformation Format, comme UTF-8, qui peut directement coder n’importe quel caractère Unicode, ou un codage de caractère plus ancien comme Windows-1252, qui ne le peut pas.

Les entités de caractères permettent de s’abstraire de l’encodage du document.

Détermination de l'encodage de caractères[modifier | modifier le code]

Afin d’interpréter correctement le HTML, un navigateur web doit supposer quel caractère Unicode est représenté par la forme encodée d’un document HTML. Pour ce faire, le navigateur web doit savoir quel encodage a été utilisé. Quand un document est transmis via un message MIME ou une couche de transport qui utilise un contenu de type MIME telle qu’une réponse HTTP, le message peut signaler l’encodage via un entête Content-Type, tel que Content-Type: text/html; charset=ISO-8859-1. D’autres moyens externes pour déterminer l’encodage sont autorisés, mais rarement utilisés. L’encodage peut également être déclaré à l’intérieur même du document, sous la forme d’un élément META, comme <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">. En l’absence de toute déclaration d’encodage, le défaut dépend de la configuration de la localisation du navigateur. Sur un système configuré essentiellement pour les langues ouest-européennes, ce sera généralement ISO-8859-1 ou l’une de ses extensions comme Windows-1252 ou ISO-8859-15. Pour un navigateur où les caractères multi-octets sont la norme, une forme d’autodétection sera sûrement appliquée. Une mauvaise connaissance du codage utilisé peut aboutir à un affichage dégradé des caractères, notamment du caractère euro.

Les encodages 8 bits locaux sont plus anciens que l’Unicode et de ce fait plus utilisés dans certaines zones géographiques. À cause de ces habitudes, notamment dans les langages de programmation et systèmes d’exploitation, et du désir d’éviter d’ennuyer les utilisateurs avec la nécessité de comprendre les nuances d’encodage, beaucoup d’éditeurs de textes utilisé par les auteurs HTML sont incapables ou non-désireux d’offrir le choix de l’encodage, lors du stockage d’un fichier sur le disque, et souvent ne permettent pas la saisie de caractères en dehors d’une plage de valeur très limitée. En conséquence, beaucoup d’auteurs HTML sont totalement inconscients des problématiques d’encodage et peuvent n’avoir aucune idée de l’encodage utilisé dans leurs documents. Il est aussi communément mal compris que la déclaration d’encodage n’affecte pas l’encodage effectif, vu qu’il ne s’agit que d’une étiquette informative qui peut ne pas être exacte.

Beaucoup de documents HTML se présentent avec des déclarations d’encodage inappropriées, ou sans aucune déclaration. Afin de déterminer l’encodage dans de tels cas, beaucoup de navigateurs permettent à l’utilisateur de sélectionner manuellement un encodage dans une liste. Ils peuvent également employer un algorithme d’auto-détection qui travaille de concert avec la configuration manuelle. La surcharge manuelle peut s’appliquer à tous les documents, ou seulement à ceux pour lesquels l’encodage ne peut pas être déterminé par les déclarations et/ou les « patterns octets ». La présence d’une surcharge manuelle, et le fait qu’elle soit largement utilisée et adoptée par les utilisateurs, cachent l’imprécision des déclarations d’encodage sur le Web ; en conséquence de quoi, le problème risque de persister. Cela a été résolu d’une certaine manière par XHTML, qui, étant de l’XML, nécessite que la déclaration d’encodage soit précisée, et qu’aucun contournement ne soit employé quand elle est inadaptée.

Encodages effectivement utilisés sur internet[modifier | modifier le code]

D’après un blog concernant les pages indexées par Google[2], 2008 serait l’année où au niveau mondial l’UTF-8, dont l’utilisation est en croissance rapide, dépasserait les autres usages d’encodages régionaux. D’après des données internes à Google assemblées par Eric von der Poel, les encodages d’Europe occidentale se maintiendrait à 25 % sur la période 2001-2008, alors que sur la même période, UTF-8 passe de 0 % à 25 %, et l’ASCII de 50 % à 25 %.

Selon des données de juillet 2012, les encodages d’Europe occidentale descendraient à 10 %, alors que l'UTF-8 monterait à 65 %, l'UTF-9 en comptant l'ASCII atteindrait 90 %, et l’ASCII seul n'atteindrait que 15 %.


Lorsqu’un robot parcours le web, il peut effectuer des statistiques sur les encodages déclarés dans les entêtes HTTP, ou dans les balises HTML. Cependant, les encodages utilisés varient en fonction de l’environnement linguistique, et donc notamment en fonction des TLD.

À titre d’exemple, en se basant sur les réponses HTTP, en , on peut noter les taux de déclarations suivants :

encodage HTTP Unknown UTF-8 ISO 8859-1 ISO 8859-2 windows-1255 gb2312 euc-jp gbk ks_c_5601-1987 euc-kr euc_kr
com 44 % 28 % 12 % 4 % 1 %
fr 34 % 39 % 24 %
nl 32 % 49 % 16 %
au 31 % 43 % 23 %
it 46 % 22 % 30 %
uk 44 % 34 % 21 %
pl 48 % 21 % 4 % 24 %
cn 75 % 8 % 3 % 7 % 4 %


encodage HTML Unknown UTF-8 ISO 8859-1 gb2312 euc-jp gbk Shift-JIS ISO 8859-15 x-sjis
com 36 % 24 % 13 % 11 % 2 % 7 % 2 %
fr 26 % 44 % 27 % 1 %
jp 21 % 26 % 11 % 36 % 1 %

Support des navigateurs Web[modifier | modifier le code]

De nombreux navigateurs ne sont capables d’afficher qu’une petite partie du répertoire Unicode. Voici comment votre navigateur affiche différents exemples de code Unicode :

Caractère Code HTML Nom Unicode Ce qu’affiche votre navigateur
U+0041 &#65; or &#x41; Lettre majuscule latine A A
U+00DF &#223; or &#xDF; Lettre minuscule latine s dur ß
U+00FE &#254; or &#xFE; Lettre minuscule latine thorn þ
U+0394 &#916; or &#x394; Lettre majuscule grecque delta Δ
U+0419 &#1049; or &#x419; Lettre majuscule cyrillique i bref Й
U+05E7 &#1511; or &#x5E7; Lettre hébraïque qouf ק
U+0645 &#1605; or &#x645; Lettre arabe mîm م
U+0E57 &#3671; or &#xE57; Chiffre thaï 7
U+1250 &#4688; or &#x1250; Syllabe éthiopienne qhä
U+3042 &#12354; or &#x3042; Syllabe hiragana A (japonais)
U+53F6 &#21494; or &#x53F6; Idéogramme unifié CJC-53F6 (Sinogramme simplifié shè, xié, yè, « feuille »)
U+8449 &#33865; or &#x8449; Idéogramme unifié CJC-8449 (Sinogramme traditionnel shè, xié, yè, « feuille »)
U+B5AB &#46507; or &#xB5AB; Syllabe hangûl Tteolp (coréen Ssangtikeut Eo Rieulbieup)
U+10346 &#66374; or &#x10346; Lettre gotique f 𐍆
Vous devrez peut-être installer une ou plusieurs polices multilingues comme Code2000 (et Code2001 pour quelques langues mortes, comme le gotique) pour pouvoir afficher tous les caractères ci-dessus.

On remarquera que pour afficher un caractère Unicode dans un fichier web, il « suffit » d’écrire &#x suivi de son numéro, puis de ;.

Certains navigateurs web tels que Mozilla Firefox, Opera, et Safari, sont capables d’afficher des pages web multilingues en choisissant intelligemment une police pour afficher chaque caractère de la page. Ils afficheront correctement n’importe quel mélange de blocs Unicode, pour peu que les polices appropriées soient présentes dans le système d’exploitation.

Internet Explorer pour Windows est capable d’afficher le jeu complet de caractères Unicode, mais, d’après le script international actuel, les caractères qui ne sont pas présents dans la première police disponible ne s’afficheront que s’ils sont présents dans les options désignées comme second choix[3]. Par exemple, seule la police Arial sera utilisée pour le texte Latin, ou Arial Unicode MS si elle est préalablement installée ; quant aux autres polices définies, elles sont ignorées[4]. Si l’encodage du caractère n’est pas reconnu, Internet Explorer affichera des rectangles en lieu et place des caractères non reconnus. C’est la raison pour laquelle les auteurs de page web doivent définir plusieurs polices qui seraient susceptibles d’être présentes sur l’ordinateur de l’utilisateur, en les déclarant manuellement comme choix prioritaire. Microsoft recommande les CSS ou feuilles de style en cascade pour déclarer les polices désirées. Aucune police n’a été définie pour les caractères du tableau ci-dessus, mais la plupart devraient être rendus correctement si les polices appropriées sont installées sur l’ordinateur.

D’anciens navigateurs, tels que Netscape Navigator 4.77, ne peuvent afficher que le texte permis par les polices associées à l’encodage indiqué par la page, et peuvent mal-interpréter les références de caractère numériques telles que le codage Unicode. Quand vous utilisez un tel navigateur, il y a peu de chances que votre ordinateur dispose de toutes ces polices ou que le navigateur puisse utiliser toutes les polices disponibles sur une même page. Le navigateur n’affichera donc pas tous les exemples ci-dessus correctement, mais pourra en afficher une partie. Puisqu’ils sont encodés selon le standard, les exemples s’afficheront correctement sur tout système aux normes s’il est équipé des polices de caractères requis. Certains systèmes, comme Windows 2000, requièrent une configuration manuelle pour afficher des caractères autres que PMB, comme la lettre gotique Fehu dans la table ci-dessus. Les polices Unicode avec une large couverture Unicode et un jeu de caractères fourni sont préférables.

Notes et références[modifier | modifier le code]

  1. http://spectrum.ieee.org/telecom/standards/will-unicode-soon-be-the-universal-code
  2. (en) Official Google Blog: Moving to Unicode 5.1, posté le 5 mai 2008.
  3. (en) Microsoft (2006), “Globalization Step-by-Step: Fontsat Microsoft Global Development and Computing Portal. Consulté le 26 avril 2006.
  4. (en) Girt By Net (2005), “Internet Explorer Makes Me ☹at girtby.net. Consulté le 26 avril 2006.

Voir aussi[modifier | modifier le code]

Bibliographie[modifier | modifier le code]

Liens externes[modifier | modifier le code]