Aller au contenu
Ghostchars

Guide

Trouver les caractères cachés dans VS Code

Activez le surlignage Unicode, recherchez les points de code sans largeur avec une regex échappée et nettoyez le fichier avant un échec de build ou un diff trompeur.

Par Kris Vinters · Publié le · 3 min de lecture

Commencez par le surlignage Unicode de VS Code

Ouvrez les paramètres et recherchez Unicode Highlight. VS Code classe les alertes en caractères invisibles, ambigus et non ASCII. Survolez un résultat pour lire sa raison. Les valeurs peuvent dépendre de la confiance de l'espace de travail, des commentaires, des chaînes, des polices et des paramètres régionaux.

Les trois réglages contrôlent les classes séparément. Activez celle dont vous avez besoin au lieu de traiter tout Unicode comme une erreur. Les lettres non ASCII sont normales dans les traductions, noms et tests; les contrôles invisibles demandent une revue ciblée.

  • editor.unicodeHighlight.invisibleCharacters
  • editor.unicodeHighlight.ambiguousCharacters
  • editor.unicodeHighlight.nonBasicASCII

Le surlignage aide à la revue, mais ne constitue pas une analyse exhaustive. VS Code décrit la classe ambiguë comme heuristique; police et langue influencent le résultat.

Recherchez avec une regex échappée

Ouvrez Rechercher, activez les expressions régulières et saisissez le motif affiché. Il ne contient que de l'ASCII visible, mais cherche U+200B à U+200D et U+FEFF. Examinez chaque résultat avant de le remplacer.

Regex : [\u200B-\u200D\uFEFF]

Cette plage couvre ZERO WIDTH SPACE, ZERO WIDTH NON-JOINER, ZERO WIDTH JOINER et le caractère de marque d'ordre des octets. Cherchez aussi \u2060 pour WORD JOINER. Ne supprimez pas automatiquement un joiner porteur dans un emoji ou une écriture cursive.

Un caractère caché peut couper un identifiant, rendre deux clés inégales, faire échouer une recherche, modifier un jeton ou produire un diff invisible. Une marque d'ordre des octets au début peut aussi être traitée autrement que le même point de code au milieu.

U+200B ZERO WIDTH SPACEU+200D ZERO WIDTH JOINERU+FEFF ZERO WIDTH NO-BREAK SPACEU+2060 WORD JOINER

Nettoyez tout le texte, puis examinez les résultats

Pour un fichier texte, sélectionnez tout, copiez dans le nettoyeur et contrôlez les résultats avant de recopier la version propre. Le passage standard retire les caractères isolés, mais garde un joiner reconnu comme porteur dans un emoji ou une écriture cursive.

Pour un .html pris en charge, ou des documents .docx et .odt, utilisez le rapport de document. Il n'accepte pas tous les formats source; pour .js, .ts, .json ou .md, utilisez le nettoyeur par collage.

Ouvrir le nettoyeur de caractères sans largeurOuvrir le rapport de document

Un caractère caché peut expliquer un échec de build ou de diff. Il n'explique pas qui a écrit le code ou la prose. Le nettoyeur traite des points de code; le rapport de prose renvoie des mesures sans verdict.

Questions sur les caractères cachés dans VS Code

VS Code surligne-t-il tous les caractères invisibles par défaut ?

Non. Les valeurs et exceptions peuvent dépendre de la confiance de l'espace de travail, des commentaires, chaînes, caractères autorisés et langues. Recherchez Unicode Highlight et contrôlez les valeurs effectives.

La regex trouve-t-elle tous les caractères Unicode cachés ?

Non. Elle cible U+200B à U+200D et U+FEFF. Ajoutez des points de code comme \u2060 pour WORD JOINER ou utilisez le nettoyeur pour une table plus large.

Pourquoi un seul caractère sans largeur peut-il casser un build ?

Les parseurs, identifiants, sommes de contrôle et comparaisons utilisent les points de code, pas l'apparence. Un point invisible peut couper un jeton ou rendre différentes deux chaînes visuellement identiques.

Vous trouverez davantage de conseils pratiques dans tous les guides sur les caractères cachés et les limites du nettoyage.

Statistiques anonymes ?

Ghostchars traite votre texte dans le navigateur et ne l'envoie jamais nulle part. Nous aimerions comptabiliser les pages vues avec un service de mesure auto-hébergé et sobre en cookies. Jamais le moindre contenu.