Point de code, caractère et glyphe : trois couches distinctes
Unicode attribue un numéro à chaque caractère abstrait, noté U+ suivi de l'hexadécimal : c'est le point de code ; ² est U+00B2 et → est U+2192. La façon dont ce point de code est stocké dans un fichier dépend de l'encodage : en UTF-8, U+00B2 occupe 2 octets, U+2192 en occupe 3, un emoji en occupe 4 ; en UTF-16 (la représentation interne des chaînes JavaScript), un caractère du premier plan supplémentaire occupe deux unités de code, d'où '😀'.length === 2. L'affichage final dépend de la police : si elle ne contient pas le glyphe, le navigateur affiche un carré vide (le fameux « tofu ») et essaie les polices de secours dans l'ordre — c'est la raison pour laquelle un même texte ne s'affiche pas pareil d'un ordinateur à l'autre.
Pourquoi deux µ, deux Å et deux Ω ?
En intégrant les jeux de caractères antérieurs, Unicode a conservé leurs numéros d'origine, d'où les caractères de compatibilité : le micro Latin-1 µ (U+00B5) et le mu grec μ (U+03BC), le Å Latin-1 (U+00C5) et le ångström Å (U+212B), l'oméga grec Ω (U+03A9) et l'ohm Ω (U+2126) — même le degré ° et l'indicateur ordinal masculin º (U+00BA) se ressemblent presque trait pour trait. Pour la recherche, le tri ou la déduplication, ce sont des caractères différents : les mélanger dans un texte donne des cas « le mot est là mais la recherche ne le trouve pas ». La normalisation Unicode (NFKC) replie les caractères de compatibilité sur leur forme recommandée ; cette page précise dans les noms laquelle est la forme recommandée.
Entités HTML : nommées, décimales, hexadécimales
HTML propose trois écritures pour un même caractère : l'entité nommée °, la décimale ° et l'hexadécimale °. Les entités nommées n'existent que pour les deux mille et quelques caractères de la table standard WHATWG (♥ en a une, ☃ non) ; les entités numériques fonctionnent pour n'importe quel point de code. Les pages web d'aujourd'hui sont presque toutes en UTF-8 : le plus simple est d'écrire le caractère directement ; les entités servent surtout dans trois cas : les caractères à échapper obligatoirement < > & ", les caractères invisibles difficiles à saisir dans un source ( ​), et les caractères qu'un éditeur risque de réécrire. En JavaScript, on utilise \u{2603} ; en CSS, la propriété content prend "\2603" — la fiche de détail liste toutes ces formes.
Les caractères invisibles
La catégorie « ponctuation anglaise et universelle » contient une série de caractères qui ne montrent rien une fois copiés : l'espace insécable (U+00A0, qui empêche deux mots d'être coupés en fin de ligne), l'espace de largeur nulle (U+200B, qui autorise un retour à la ligne à cet endroit sans occuper de largeur), le liant de largeur nulle (U+200D, qui fusionne deux emoji, comme 👨👩👧), le trait d'union conditionnel (U+00AD, affiché seulement en cas de césure), les marques bidirectionnelles LRM/RLM. Ils sont très utiles en typographie, mais glissés dans du code, un mot de passe ou un nom de fichier, ils créent des bugs étranges du type « identiques à l'œil mais pas égaux ». Cette page les affiche avec ␣ comme caractère de remplacement — c'est le vrai caractère qui est copié ; pour inspecter ce qui se cache dans un texte, passez par Stéganographie de texte ou l'Outil d'échappement.
Ponctuation chinoise et formes pleine chasse
La ponctuation chinoise se trouve surtout dans les blocs CJK Symbols and Punctuation (U+3000–303F) et Halfwidth and Fullwidth Forms (U+FF00–FFEF) : la virgule pleine chasse , est U+FF0C, sans rapport avec la virgule anglaise U+002C ; le point médian · (U+00B7) sert à séparer les noms étrangers et n'est pas la puce • (U+2022) ; le tiret —— est la réunion de deux tirets cadratins (U+2014) et les points de suspension …… celle de deux U+2026. En mode chinois, les méthodes de saisie convertissent automatiquement , . ? en pleine chasse, la touche ` en ·, ^ en ……, _ en —— et < > en 《》 — c'est ce qui justifie les mentions « méthode de saisie chinoise, Shift+X » dans la ligne « comment le taper ».
Exposants et indices : caractères ou mise en forme ?
² et ³ sont des caractères Latin-1 à part entière ; ⁴–⁹ et ₀–₉ vivent dans le bloc Superscripts and Subscripts, et la couverture des polices y est correcte. Mais ce ne sont que des caractères « qui ressemblent à des exposants » : leur taille et leur position dépendent de la police, contrairement à un exposant de mise en forme (un caractère normal + formatage) obtenu sous Word avec ++Ctrl+Shift+=++. Le premier peut apparaître en texte brut (noms de fichiers, chat, commentaires de code) ; le second n'existe que là où le texte enrichi est pris en charge. Pour une formule chimique H₂O, une unité m² ou un appel de note ¹, la version caractère est la plus sûre ; pour une formule mathématique, utilisez plutôt LaTeX ou un éditeur d'équations — chaque symbole mathématique de cette page est accompagné de sa commande LaTeX.