Comment obtenir des caractères spéciaux en HTML ?

IntroductionPolices unicodeEncodageEntités HTML
Désignation des caractères par leurs numérosBizarreries
Un explorateur UnicodeConclusion : prudence!
Post-scriptum : polices de symboles et petits dessins

Introduction

La notion de caractère spécial n'existe pas en HTML, ou, plutôt, elle n'existe plus.

En effet, pendant les premiers temps d'Internet, à cause de la forte dominante anglo-saxonne dans la communauté qui travaillait à la normalisation du HTML, on a pu considérer que tout ce qui sortait des caractères anglo-saxons constituait autant de caractères spéciaux. Cela transparaît dans le choix des entités qui n'ont été définies que pour des langues occidentales non anglo-saxonnes. Mais cette époque est révolue.

Le HTML moderne a pour ambition que toute page Internet, écrite dans n'importe laquelle des milliers de langues pratiquées sur la Terre, puisse être lue n'importe où ailleurs — si on dispose des caractères adéquats, évidemment. Il est alors évident que tout caractère bien «ordinaire» ici pourra apparaître assez «spécial» là, mais on refuse d'entrer dans ces distinctions.

Il y a néammoins une difficulté bien concrète : dans son petit coin de planète à soi, il y a des caractères qui posent problème, soit qu'ils ne figurent pas dans le clavier, soit qu'ils y sont, mais qu'ils refusent d'apparaître correctement à l'écran. Comment les inscrire dans sa page web ?

Polices unicode

Pour satisfaire les buts planétaires du HTML, on n'y va pas par quatre chemins : en théorie, tout simplement, toute police doit pouvoir représenter tous les caractères de la planète. Pour cela, on adopte le classement proposé par le consortium Unicode, où chaque caractère est représenté par 2 octets. On parle ainsi de polices unicode.

Ces deux octets signifient que chaque police peut contenir jusqu'à 65000 caractères, mais cela ne signifie pas que toutes les places soient occupées. La plupart des polices ne sont livrées qu'avec une ou deux centaines de caractères. Ce n'est que tout récemment qu'on a des systèmes d'exploitation avec des polices système offrant un millier de caractères ou plus. Sur Window-XP, l'utilitaire Table des caractères (dans Accessoires > Outils système) permet de visualiser les différents caractères disponibles dans les polices du système. Mais il y a encore de nombreuses places vides!

Dans MacOS-9 ou OS-X, l'installation française par défaut ne fournit des polices système ne qu'avec les caractères occidentaux, mais on peut ultérieurement reprendre cette installation pour enrichir ces polices par d'autres familles de caractères (grecs, cyrilliques, arabes...)

Enfin, à noter que le classement de tous les caractères de la planète n'est pas encore achevé. Il faudra peut-être introduire un 3ème octet.

Encodage

L'encodage des caractères décrit de quelle manière ces caractères sont enregistrés dans le fichier HTML. Pour diverses raisons, on n'utilise jamais la traduction simple où chaque caractère serait codé par les deux octets de son numéro unicode.

Ces observations conduisent, soit à imaginer des encodages Unicode comprimés comme l'UTF-8, soit à pérenniser l'encodage par les polices nationales. Chaque page HTML commencera donc, en principe, par une ligne «charset» précisant l'encodage utilisé.

Dans le cas des polices nationales, chaque octet dans le fichier désignera évidemment le caractère correspondant de la police et on sera limité à 256 caractères. Il faut imaginer un mécanisme pour appeler les caractères «spéciaux» en dehors de cette police. Le HTML en propose deux, l'appel par entité ou l'appel par le numéro unicode.

Entités HTML

Un certain nombre de caractères sont accessibles au moyen d'entités HTML, sortes d'expressions mnémotechniques donnant une description (très) abrégée du caractère. Par exemple, l'entité pour «é» est «eacute» (acute après le «e» rappelant que ce «e» est modifié par un accent aigu). De même les entités pour «à» ou «ô» sont «agrave» ou «ocirc».

Ces entités s'emploient entre un & initial et un point-virgule final. On code donc é pour obtenir «é», è pour «è», ô pour «ô», etc...

Nous donnons séparément la liste de toutes les entités définies par le consortium W3C. Comme il n'y en a que quelques centaines, on ne peut pas ainsi accéder à tous les caractères unicodes et il faut donc disposer d'un mécanisme plus général pour utiliser ces caractères.

A part des caractères mathématiques ou graphiques, ces entités donnent surtout accès aux caractères diacritiques (c.à.d. des lettres modifiées par diverses formes d'accents ou de cédilles) des principales langues latines. Cette limitation traduit clairement le fait historique que le HTML s'est développé dans une communauté occidentale à dominante anglo-saxonne.

Désignation des caractères par leurs numéros

Les caractères peuvent toujours être codés au moyen de leur numéro unicode. En fait les entités ne sont probablement que des numéros unicode déguisés, mais on les a introduites pour d'évidentes raisons de commodité, ces entités étant tout de même plus faciles à mémoriser que des numéros.

Si le numéro est connu sous forme décimale, on le place entre un &# et un point virgule final (noter l'analogie avec les entités). Par exemple, le «e» (numéro 101) s'obtient avec e et le «é» (numéro 233) avec é. Ce mécanisme donne donc une méthode générale pour faire apparaître tout caractère qu'on ne trouverait pas sur le clavier... à condition de connaître son numéro.

Si le numéro est connu sous forme hexadécimale (cas général quand on part des documents du consortium Unicode), on le place entre un &#x et un point virgule final. Par exemple, avec 233 (décimal) = e9 (hexa), le «é» s'obtient avec é.

Insistons sur le fait qu'il s'agit bien du numéro unicode du caractère, et non pas de son numéro dans la police nationale éventuellement utilisée. La confusion est facilitée par le fait que les premiers caractères unicode sont rangés dans l'ordre des polices nationales occidentales ISO-8859-1... et par un certain laxisme des navigateurs. Par exemple, le caractère €= € ne devrait pas donner le signe de l'euro, quoi qu'en pense Mozilla (il s'agit d'un caractère réservé; voir notre article sur les charsets)...

L'euro se trouve bien dans le charset 8859-15 au numéro 164, mais le codage ¤ ne donne jamais l'euro, qu'on se déclare en ISO-8859-15 ou non. Son numéro unicode est 8364 et le bon codage par ce numéro est € et ceci quel que soit le charset déclaré.

Bizarreries

Faut-il vraiment trouver «bizarre» que tout ne fonctionne pas attendu ?

Outre ce € (=€) qui donne l'euro contre toute attente sur Mozilla (mais pas sur IE5-mac), si on peut accepter sans trop de surprise qu'un code puisse fonctionner sur un navigateur et pas sur un autre, copie écran il est plus fort de café que le même caractère appelé par le même code dans la même police donne des caractères différents selon les navigateurs, comme on peut le voir sur les copies d'écran ci-contre (réalisées sous MacOS), avec le caractère flèche ↵ (sur votre système, cela donne: ↵)

Manifestement, les navigateurs ont inclus un mécanisme complexe pour aller chercher dans d'autres polices les caractères demandés, en cas de besoin. C'est (probablement) la raison pour laquelle les caractères grecs sont toujours les mêmes sous MacOS-9 quelle que soit la police, alors que Windows-XP affiche des caractères fort différents en verdana ou en times.
copie écran Mais ce mécanisme est parfois pris en défaut, témoin l'image ci-contre, assez cocasse à nos yeux, des ligatures latines obtenues sous Mozilla et Windows-XP pour une police «Times» (sic).

Un explorateur unicode

Si vous aimez un brin d'aventure, et si voulez vous faire une opinion par vous-même, lancez notre explorateur unicode.

On constate des résultats assez variés quand on change de navigateur et surtout quand on change de machine. Par exemple, on n'a pas de caractères orientaux (cyrillique, hébreu, arable...) avec MacOS — à moins d'avoir fait une installation spéciale —, mais on en a avec Windows, et davantage avec Windows-XP qu'avec Windows-98. Mais les résultats varient beaucoup quand on change de navigateur. Par exemple, on a de nombreux symboles Dingbat avec Mozilla mais aucun avec IE5 ou IE6 (sous MacOS ou Windows).

Conclusion : prudence !

On l'a deviné, le recours aux numéros unicode pour obtenir des caractères exotiques ou des symboles inhabituels est une entreprise à risques. Cela peut s'admettre en une période où les polices unicode continuent toujours leur progression dans les systèmes d'exploitation et les programmes.

On aurait pu penser que les symboles définis par entités avaient fait l'objet d'une attention prioritaire des concepteurs de navigateurs. Las ! sous Windows et IE-6, il y a encore de nombreux trous, par exemple pour certains symboles de mathématiques ou pour certaines flèches (alors que la couverture par Mozilla ou par IE5-mac est quasi-complète).

Les choses avancent. Pas trop vite...

Post-scriptum : polices de symboles et petits dessins

Si vous avez vraiment besoin d'un caractère spécial, vous pouvez toujours en faire une image. C'est la technique que de nombreux sites commerciaux ont prise il y a deux ans pour afficher des prix en euros. Vous pouvez en faire autant pour n'importe quel «caractère» :
symboles
Mais il existe aussi des polices de «symboles» de bric et de broc où vous pouvez parfois trouver des choses intéressantes. En fait les caractères précédents sont extraits de la police Wingdings et on peut les obtenir par le code
<span style="font-family:wingdings"> ( G J L M </span> et, de fait, si vous avez bien cette police, vous devriez voir la même chose ci-dessous :
( G J L M
Mais tout est là : si vous avez bien cette police. Il existe beaucoup de polices de ce genre et elles ne sont pas installées partout. Les Wingdings sont sans doute les plus répandues, parce qu'elles ont été abondamment distribuées par Microsoft, avec Windows bien sûr, mais aussi avec les Explorer pour MacOS et dans des packs de polices pour Linux. On les trouve donc un peu partout, mais ce n'est pas une certitude et le recours aux images-caractère reste donc un choix prudent.
Evidemment, cela alourdit les pages, mais il est peu probable que vous utilisiez ces symboles sans arrêt dans vos pages (en dehors des euros pour des pages de tarifs, mais ce problème est maintenant résolu avec l'entité &euro;). Le seul défaut que nous voyons est que ces images-caractère ne grossissent pas avec les caractères quand le visiteur joue du menu Taille des caractères.

Pour en terminer avec ce sujet, répétons qu'il est prévu que les polices Unicode contiennent un jeu de caractères Dingbats, mais on rejoint ici les conclusions de prudence mélancolique du paragraphe précédent : pour l'heure, ces caractères n'apparaissent que si la machine et le navigateur le veulent bien... Essayez ici pour voir (pas la peine si vous êtes avec Explorer...).

Charles