Attention : la lecture de ce billet est probablement plus aisée sur sa page originale.
Suite à des échanges sur Twitter avec Mitternacht, et surtout la lecture d'un article proposant une presque bonne idée, je me suis proposé pour faire la liste des caractères spéciaux d'espacements disponibles en Unicode, dans l'idée d'en faire parler sur le génialissime Typographisme.net.
Tout partait d'un article qui tentait d'aller plus loin que le simple espace (que l'on note ␣ et dans les tables techniques par ␠ pour faire le gars qui s'y connaît devant les clients) et l'espace insécable à peu près connu de tous (là, vous utilisez ⍽ comme signe cabalistique qui finira de mystifier votre interlocuteur).
Il faut dire qu'on peut avoir un besoin plus que ponctuel pour un espace spécial. Par exemple, toute ponctuation à deux-traits en Français, c'est à dire autres que le point ou la virgule, doit être précédée d'un espace, si possible insécable, à l'exception des guillemets où ils l'entourent. (Faudrait déjà que je parle comment le gérer au quotidien dans ma psychanalyse du clavier)
Vous pourriez considérer comme plus lisible d'utiliser un espace moins long d'une demi-largeur, mais au comportement insécable, c'est-à-dire n'entrainant pas un retour à la ligne.
Le billet qui a entraîné l'écriture de celui-ci préconisait l'usage d'une balise HTML stylée : <span class="demiespace"> </span>
.
Un usage du HTML qui ressemble plus à une contrainte et à un usage disgracieux de la sémantique. Ni franchement à faire, ni franchement pratique pour l'utilisateur lambda (songez à un copié-collé vers un éditeur).
Alors que l'Unicode dispose d'une incroyable palette de caractères ad hoc, parfois à l'absurde...
Car, il y a bien une chose très importante à savoir quand on touche du HTML aussi bien côté programmation, côté design que côté contenu, et avant même de connaître ses balises HTML par cœur ou les subtilités entre XHTML et HTML, c'est bien les caractères eux-mêmes !
Cela veut dire que si vos sites servent de l'Unicode (et qu'importe la variation d'encodage du charset, UTF-7, UTF-8 ou UCS-2, c'est à votre choix et à vos usages, voire UTF-32, UCS-4,...), tout va bien. Si vous êtes encore en jeux de caractères ISO-Latin ou pire, en Windows-1522, aux uniques exceptions de l'espace standard et du NBSP qui eux sont présents dans tous les jeux de caractères (“charsets”) 8 bits “simples”, il faudra utiliser les entités HTML (Je vais pas vous rappeler à quoi servent les entités HTML ?).
Hein⍽? Quoi⍽? vous avez déjà dégainé l'aspirine⍽?
Les entités HTML, c'est-à-dire la notation
, ne sont pas toutes reconnues, alors que le code-point numérique ou “entité décimale” ou encore entité XML a plus de chances de passer : La notation ´
faisant théoriquement appel directement à l'index numérique de la police de caractère elle-même.
Malheureusement, il se trouve que ça ne marche pas partout (Opera, du moins) et absolument pas garantie en dehors d'un charset Unicode.
Au moins, je vous aurais prévenu.
Il est très important aussi de noter que le support des caractères, voire des entités varie fortement selon l'encodage du document, mais aussi selon le système d'exploitation (très rare, mais Ms-Win XP est toujours là), les bibliothèques logicielles (si vous devez coder une regex, cela peut vous poser souci, ne parlons pas d'un Direct2D très vieux…), les logiciels eux-mêmes (MsIE6), les polices générales de votre OS qui ont été installées selon votre locale linguistique (principalement pour gérer une fallback), ou encore la police de caractère choisie pour l'affichage.
Fallbacks (solutions de replis)
Dans ce dernier cas, méfiez-vous car le navigateur web peut se retrouver à afficher en lieu et place, au “hasard” :
- soit le caractère attendu, mais dans une autre police que prévue (et là, vous avez vraiment de la chance, ou votre ordi a tout simplement trop de polices systèmes),
- soit un espace blanc plus ou moins de la bonne taille (dans le cas où vous tentez de faire afficher à MsIE un des espaces ci-dessous, ce qui N'est PAS le comportement attendu),
- soit le code en clair de l'entité HTML si c'est ce que vous avez utilisé (ce qui est le comportement prévu en HTML en cas d'incompréhension),
- soit ⬚, le placeholder indiquant un point Unicode non-affiché, donnant fort obligeamment le code point en 4 chiffres hexa dans un carré (du ㍑ quoi),
- soit ▯, le placeholder d'un caractère inconnu,
- soit �, le placeholder officiel d'un caractère invalide.
Le dernier point très important, c'est que les logiciels se réfèrent bien évidemment à la norme Unicode concernant la segmentation de texte pour ensuite appliquer les séparations que sont les espaces. Il est arrivé plus d'une fois de découvrir des petites surprises en lisant ce que l'industrie a prévu (dans ce PDF, chapitre 16.2).
Une table, des espaces… qui ont une largeur
Les boutons de tests permettent de vérifier le résultat sur ce paragraphe.
char | Nom usuel | T.R. | Entité | Point Unicode | Plan/Jeu | Codage UTF-8 | Insécable | Compatible | Tests |
---|---|---|---|---|---|---|---|---|---|
Em Quad | 4 |   | U+2001 | Ponctuation | 0xE2 0x80 0x81 | Non | EMSP est recommandé | ||
EMSP: Espace Em | 4 |   | U+2003 | Ponctuation | 0xE2 0x80 0x83 | Non | Tous | ||
Espace d'idéogramme | 4 |   | U+3000 | Idéogrammes CJK | 0xE3 0x80 0x80 | Non | ? ⚐ | ||
Espace largeur de figure | 3 |   | U+2007 | Ponctuation | 0xE2 0x80 0x87 | Oui | ? | ||
⠀ | Espace braille | 3 | ⠀ | U+2800 | Braille | 0xE2 0xA0 0x80 | Oui | ? sauf ⓐⓁ | |
En Quad | 2 |   | U+2000 | Ponctuation | 0xE2 0x80 0x80 | Non | ENSP est recommandé | ||
ENSP: Espace En | 2 |   | U+2002 | Ponctuation | 0xE2 0x80 0x82 | Non | Tous | ||
  | Espace Tiers d'Em | 1⅓ |   | U+2004 | Ponctuation | 0xE2 0x80 0x84 | Non | Tous, sauf ⓢⓐ | |
Espace largeur de ponctuation | 1⅓ |   | U+2008 | Ponctuation | 0xE2 0x80 0x88 | Non | ? | ||
Espace standard | 1 |   | U+0020 | ASCII | 0x20 | Non | Tous | ||
NBSP: Espace insécable | 1 | | U+00A0 | Latin-1 | 0xC2 0xA0 | Oui | Tous. ✁ | ||
  | Espace Quart d'Em | 1 |   | U+2005 | Ponctuation | 0xE2 0x80 0x85 | Non | Tous, sauf ⓢⓐ | |
Espace Sixième d'Em | ⅔ |   | U+2006 | Ponctuation | 0xE2 0x80 0x86 | Non | ? | ||
Espace maigre | ½ |   | U+2009 | Ponctuation | 0xE2 0x80 0x89 | Non | Tous sauf † | ||
NNBSP: Espace maigre insécable | ½ |   | U+202F | Ponctuation | 0xE2 0x80 0x8F | Oui | ? sauf ⓐⓁ† (eh bé google?) et Opera | ||
MMSP: Espace mathématique | ½ |   | U+205F | Ponctuation | 0xE2 0x81 0x9F | Oui | ? sauf ⓐⓁ | ||
Espace fin | ¼ |   | U+200A | Ponctuation | 0xE2 0x80 0x8A | Non | ? | ||
| MVS: Séparateur de voyelles Mongol | ? | ᠎ | U+180E | Mongol | 0xE1 0xA0 0x8E | Non | ? ⚐ |
Texte de test
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
(Allez-y, vous pouvez éditer ce paragraphe : la suite n'est que du faux-texte pour essayer les espaces)... Ah non attention, premièrement, il faut toute la splendeur du aware et je ne cherche pas ici à mettre un point ! C'est pour ça que j'ai fait des films avec des replicants. Si je t'emmerde, tu me le dis, ce n'est pas un simple sport car en vérité, la vérité, il n'y a pas de vérité et finalement tout refaire depuis le début Je ne voudrais pas rentrer dans des choses trop dimensionnelles, mais, je sais que, grâce à ma propre vérité le cycle du cosmos dans la vie... c'est une grande roue et c'est une sensation réelle qui se produit si on veut ! Et j'ai toujours grandi parmi les chiens. Et là, vraiment, j'essaie de tout coeur de donner la plus belle réponse de la terre ! Après il faut s'intégrer tout ça dans les environnements et il faut se recréer... pour recréer... a better you et c'est une sensation réelle qui se produit si on veut ! Ça respire le meuble de Provence, hein ?
La suite du tableau
Pour votre culture générale, voici les caractères d'espacement de largeur… nulle ! Pourquoi et en quoi de telles entités pourraient vous être utiles ?
Comme pour le HTML, ce n'est pas parce que la taille est nulle que la signification est quelconque : ces caractères ont une réelle signification sémantique (en fait, j'ai surtout coupé le tableau en deux pour pouvoir lire le texte de test en essayant les espacements que vous aurez le plus de chance d'utiliser).
Par exemple, vous pourriez avoir à indiquer où dans un mot une césure peut se faire, c'est-à-dire entre les syllabes. Cela peut surprendre, mais oui, j'ai eu recours à ZWSP dans des cas très précis (placer par jeu un mot très très long dans un article, sans faire pêter la mise-en-forme par un dépassement de colonne). C'est là qu'on est content d'avoir été civilement présenté à ce type de “symboles”.
char | Nom usuel | T.R. | Entité | Point Unicode | Plan/Jeu | Codage UTF-8 | Insécable | Compatible | Tests |
---|---|---|---|---|---|---|---|---|---|
| WJ: Séparateur de mots | 0 | ⁠ | U+2060 | Ponctuation | 0xE2 0x81 0xA0 | Oui | ? sauf ⓐ | |
| ZWSP: Espace nul | 0 | ​ | U+200B | Ponctuation | 0xE2 0x80 0x8B | Non | ? | |
| ZWNJ: Espace nul non-joint | 0 | ‌ | U+200C | Ponctuation | 0xE2 0x80 0x8C | Oui | ? ✁ | |
| ZWJ: Espace nul joint | 0 | ‍ | U+200D | Ponctuation | 0xE2 0x80 0x8D | Oui | ? ✁ | |
͏ | CGJ: Combo-jointeur de graphème | 0 | ͏ | U+034F | Combinaisons diatriques | 0xCD 0x8F | Oui | ? sauf ⓐ. ✁ | |
| ZWNBSP: Espace nul insécable, BOM: Détrompeur d'encodage (mérite un billet) |
0 |  | U+FEFF | Mise en forme Arabe-B, Zone technique |
0xEF 0xBB 0xBF | Oui | Tous mais déprécié |
D'une manière assez amusante, en regex, aucun des caractères de ce deuxième tableau n'est un espace compris par le meta \s
, (du moins pour mes libs) ; tout comme NBSP ce que je conçois, mais bizarrement aussi l'espace Braille en est exclu. Logique…? Néanmoins, le support Unicode dans les regex est censé apporter un jeu de propriétés étendues. J'avoue que j'ai eu la flemme de tester car là aussi, le support est très variable, mâme s'il s'agit d'un standard industriel.
Tests réalisés
J'ai conduit une batterie de tests assez limité, faute de temps. Le projet Doctype sur Google Code m'a été utile, et quelques relecteurs m'ont remonté des cas ésotériques. Pour pas trop agrandir la table, j'ai dû utiliser des symboles, désolé pour ceux qui ont une police système incomplète.
- Firefox 4.0.1 sous Linux. ✁ indique un filtrage par copié-collé ⌈ ^+C , ^+V ⌋
- Chrome 11 sous Linux
- Ⓛ Links 2.3 en terminal X sous Linux
- ⓐ Webkit sur Android 2.2, Samsung Galaxy S
- ⓢ Safari 3, selon les références Google
- † MsIE6, selon les références Google
- ⚐ Indique un affichage conditionné soit par la locale système, soit par les polices installées, en plus du support selon les logiciels.
Références
- Le standard de l'Unicode Consortium, (une partie est traduite en Français, pas forcément up-to-date)
- KCharSelect (outil système de l'environnement graphique KDE4 sur Unix/Linux/*BSD),
- le projet Doctype sur Google Code,
- Wikipedia anglophone,
Le texte du paragraphe de test généré par faux-texte.com. Total respect à JCVD, j'ai adoré ton film mais j'avais la flemme...
Commentaires et observations fortement bienvenus.
8 réactions
1 De Antoine - 10/05/2011, 23:59
Fervent défenseur de l'espace fine insécable devant les ponctuations hautes (et l'accentuation des capitales) je ne peux qu'apprécier qu'on prenne un peu de temps pour rappeler qu'il n'y a aucune excuse valable pour qu'on ne s'en serve pas.
Pour faire le lien avec la typographie, on peut rappeler que l'em est le symbole du cadratin (blanc dont la largeur égale la force de corps) et que l'espace fine est un quart cadratin. C'est la largeur du cadratin qui définit la largeur de toutes les autres espaces.
Et puisqu'on en est à parler de typo, tu nous ferais pas le même jeu avec les tirets ?
2 De xylpho - 17/05/2011, 13:58
Pour ta culture générale, en typographie on dit : _une_ espace
3 De da scritch net works - 24/05/2011, 10:28
Écrire Français sur un clavier Anglais et autres déboires
(Psychanalyse du clavier, Épisode 11) Et d'ailleurs, quelle méthode alternative de frappe accentuée ? Introduction à la géniale touche Compose...
4 De da scritch net works - 30/09/2011, 00:21
Je remets le couvert sur mon site pro
Mon ancien site pro était léger... et c'était charitable de le dire. Or, quitte à avoir une plateforme d'hébergement, autant l'exploiter. La nouvelle formule de mon site pro dascritch.com est donc désormais hébergé sur dAgence....
5 De da scritch net works - 13/03/2012, 15:09
Me voici à Sud Web
Et bang ! J'ai encore du mal à y croire. Mais fin Mai, je devrais aussi assurer le show. Me voici orateur à Sud Web, la plus grande conférence technique du secteur au sud de Paris. Un festival de rock stars du web jouant de vertigineux solos de...
6 De da scritch net works - 18/09/2012, 10:47
Des emoji dans l'Unicode ⑤ Leçons pour le webdesign
Tout est affaire de diplomatie au Japon : de ne pas perdre la (type)face, et de ne pas la faire perdre à la partie adverse. C'est très policé…...
7 De da scritch net works - 15/05/2013, 08:07
Dirty Hacky IV : Liens serrés dans la Police
Ouep. c'est comme un tour de magie : quand j'assemble toutes ces lettres, le dossier fait un très beau schéma. Comment ça, trop serrées mes menottes ? ol.listserif { list-style-type: upper-roman } ol.listserif li:before { font-family : serif }...
8 De Nico - 13/08/2013, 10:23
À noter, le ne fonctionne pas sur un site servi en application/xhtml+xml, il faut le remplacer par   .
Oui, c'est pour la beauté de la culture, car ce genre de site se fait rare.