Caractères vides et invisibles
Il n'existe pas un caractère invisible mais plusieurs, et la différence entre eux, c'est la différence entre un nom qui passe et un fichier qui refuse de s'analyser. En voici huit, avec ce à quoi chacun sert et ce que chacun casse. Appuyez sur copier pour en prendre un : rien n'aura l'air de s'être produit, et c'est bien l'idée.
Motif braille vide U+2800
vide, large d'un caractère
À employer pour : Le choix sûr par défaut pour un nom ou un message d'apparence vide. C'est une cellule braille sans aucun point levé : un vrai caractère imprimable et non une espace, et le code qui supprime les blancs le laisse tranquille.
Ce qu'il casse : Les polices sans couverture braille dessinent un rectangle. Ce n'est pas une espace : il ne se réduit pas et ne provoque pas de retour à la ligne comme elle.
Remplisseur hangûl U+3164
vide, large d'un caractère
À employer pour : L'autre blanc largement accepté. C'est un remplisseur de jamo coréen, invisible dans presque toutes les polices, et celui qui passe généralement là où une plateforme refuse U+2800.
Ce qu'il casse : Certaines plateformes normalisent le hangûl et le suppriment. Testez avant de compter dessus.
Espace sans chasse U+200B
chasse nulle
À employer pour : Une occasion de couper la ligne sans aucune largeur. Son véritable emploi est d'indiquer à un moteur de rendu où une longue chaîne insécable, une URL par exemple, peut se couper.
Ce qu'il casse : C'est une frontière de mot : il casse silencieusement Ctrl+F, le copier-coller et la comparaison de chaînes. Deux textes d'apparence identique cessent de correspondre. Ne l'employez pas comme blanc.
Gluon de mots U+2060
chasse nulle
À employer pour : L'inverse de l'espace sans chasse : il interdit la coupure à cet endroit sans ajouter de largeur. C'est le bon caractère pour coller deux choses ensemble.
Ce qu'il casse : Invisible pour un lecteur et invisible dans un diff, ce qui en fait une plaie à déboguer.
Espace insécable sans chasse U+FEFF
chasse nulle
À employer pour : Correct uniquement comme tout premier caractère d'un fichier, où il est la marque d'ordre des octets qui déclare l'encodage.
Ce qu'il casse : Partout ailleurs c'est un bogue. En tête d'un CSV il corrompt le nom de la première colonne ; en JSON il fait échouer l'analyseur dès la ligne 1. Unicode a déconseillé son emploi comme gluon, remplacé par U+2060.
Espace insécable U+00A0
large d'une espace
À employer pour : Une espace qui ne se coupe pas d'une ligne à l'autre. Correcte entre un nombre et son unité, ou dans un nom qui doit rester sur une seule ligne.
Ce qu'il casse : Elle est visible : elle occupe la largeur d'une espace. Ce n'est pas un caractère blanc, et la coller dans du code là où on attend une espace ordinaire est l'erreur de syntaxe silencieuse classique.
Espace numérique U+2007
large d'un chiffre
À employer pour : Un remplissage qui aligne des colonnes de nombres, parce qu'il fait exactement la largeur d'un chiffre dans la même police.
Ce qu'il casse : Plus large qu'une espace normale dans la plupart des dessins : elle a l'air fausse dans du texte courant.
Gluon sans chasse U+200D
chasse nulle
À employer pour : Le caractère qui construit les émojis composés : une famille ou un métier, ce sont plusieurs émojis reliés par celui-ci.
Ce qu'il casse : Seul, il ne fait rien de visible et peut être supprimé. Ce n'est pas un caractère blanc et il ne doit pas servir de blanc.
Lequel vous faut-il réellement
Un pseudo d'apparence vide, ou un message qui semble blanc. Employez U+2800, et U+3164 là où il est refusé. Les deux sont des caractères imprimables ordinaires : une plateforme qui supprime les blancs ne les retirera pas. Un caractère de chasse nulle est le mauvais choix ici : beaucoup de plateformes considèrent comme vide un nom composé uniquement de caractères de chasse nulle et le refusent.
Un endroit où une longue ligne peut se couper. U+200B, en acceptant qu'il casse la recherche dans le texte.
Deux choses qu'il ne faut pas séparer. U+2060 si vous ne voulez ajouter aucune largeur, ou U+00A0 là où une espace est de toute façon souhaitée.
Rien. Si un champ accepte une espace ordinaire, employez-en une. Un caractère invisible est un contournement de validateur, et il voyage ensuite dans tous les systèmes qui liront ce champ.
Pourquoi ils cassent les choses en silence
Aucun de ces caractères n'est visible, donc aucun n'est visible dans un bogue non plus. Une espace sans chasse collée dans un champ de mot de passe donne un mot de passe faux sans un seul caractère faux à l'écran. Une marque d'ordre des octets en tête d'un CSV renomme la première colonne en quelque chose qui ne correspond plus à votre code. Deux chaînes d'apparence identique cessent d'être égales, et les fixer du regard n'explique rien.
La façon de les voir, c'est de cesser de se fier à ses yeux : collez le texte dans un éditeur hexadécimal, ou passez-le dans un vidage de points de code. Chaque caractère de ce site porte son point de code à côté de lui pour cette raison, et l'API des caractères renvoie le point de code de tout ce que vous pouvez y coller.