Intermédiaire 8 min de lecture 25 janvier 2025

Thin space (U+2009) : comprendre, détecter et éviter les pièges

Tout semble correct, mais une comparaison échoue, un CSV décale des colonnes, une commande copiée colle renvoie une erreur. Le coupable est souvent un thin space (U+2009), une espace fine typographique quasi invisible. Voici comment il s’infiltre, pourquoi il complique vos traitements et les réflexes à adopter.

Qu'est-ce que le thin space (U+2009) ?

C’est une espace fine typographique, plus étroite que l’espace standard. Visuellement discrète, elle modifie pourtant les chaînes de caractères.

Repères pour situer le thin space parmi les autres espaces :

1 Ce que n’est pas le thin space : les espaces ASCII

Espace normal, tabulation, retour chariot, saut de ligne. Ces caractères sont connus de la plupart des fonctions standard.

Espace (32), Tab (9), CR (13), LF (10)

2 Ce n’est pas non plus un caractère de contrôle

Le thin space n’appartient pas aux codes 0–31/127. Il est imprimable, mais très discret.

NUL (0), BEL (7), ESC (27), DEL (127)

3 Famille des espaces Unicode

Là où se situe U+2009. Plusieurs espaces existent avec des largeurs et des usages différents.

Thin Space (U+2009) - Espace fine
Hair Space (U+200A) - Encore plus fine
NBSP (U+00A0) - Espace insécable (différente du thin space)
NNBSP (U+202F) - Espace fine insécable (courante en français)

4 À ne pas confondre avec les marques techniques

Le thin space n’est pas une marque comme le BOM ou le soft hyphen, mais il peut produire des effets similaires dans le parsing.

BOM (U+FEFF) - Byte Order Mark
Soft Hyphen (U+00AD) - Tiret conditionnel
LRM, RLM, LRE, RLE - Contrôles Bidi

Problèmes classiques avec le thin space

Copier-coller depuis le web ou des outils de PAO

Introduit des thin spaces dans des nombres, unités, e-mails ou URL, invisibles à l’œil mais bien présents.

Tests unitaires qui échouent

Une chaîne contient un U+2009 très discret qui fait rater les assertions d’égalité.

Trim() ou strip() inefficace

Beaucoup d’implémentations ne suppriment pas U+2009 par défaut, contrairement à l’espace ASCII.

Regex \s ou \w incomplètes

Selon le moteur et les options Unicode, U+2009 n’est pas toujours inclus dans \s. Les correspondances deviennent imprévisibles.

Exemple de problème courant :

# Deux chaînes visuellement identiques
string1 = "email@domain.com"
string2 = "email@domain.com " # Contient U+2009 (thin space) à la fin
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des changements invisibles après un copier-coller typographique
!
Des split() ou un parse CSV n’alignent plus les colonnes à cause d’un U+2009
!
Une clé .env “correcte” reste introuvable (thin space au début/fin de ligne)
!
Le curseur saute sur un “vide” dans l’éditeur, un carré apparaît en déplacement
!
Une commande collée dans le terminal renvoie “command not found” (thin space caché)

Comment détecter le thin space

Solution recommandée : Clean ASCII

Clean ASCII détecte immédiatement la présence de thin space (U+2009) et autres espaces typographiques. L’analyse en temps réel indique l’emplacement exact et les substitutions sûres à appliquer.

✅ Détection automatique

Thin Space, NNBSP, NBSP, ZWSP, soft hyphens, caractères de contrôle

📊 Analyse complète

Codes Unicode, positions exactes, propositions de remplacement

🧹 Nettoyage automatique

Conversion en espace ASCII ou normalisation selon vos besoins

💾 Export propre

Téléchargement du texte nettoyé prêt à intégrer

Autres méthodes de détection

Affichage dans l'éditeur

Activez "show invisibles" / "render whitespace" pour faire apparaître U+2009
Utilisez un linter qui signale les espaces typographiques, dont thin space

En ligne de commande (Unix)

# Rechercher explicitement le thin space
grep -nP "\x{2009}" fichier.txt
# Visualiser les fins de ligne et espaces spéciaux
sed -n l fichier.txt
# Afficher les caractères de contrôle et Unicode visibles
cat -A fichier.txt
# Inspecter les octets et points de code
hexdump -C fichier.txt

En code

JavaScript

const hasThinSpace = /\u2009/.test(str)

Python

any(ord(c) == 0x2009 for c in s)

Excel / Google Sheets

TROUVE(UNICHAR(8201); cellule) > 0

Nettoyer et prévenir le thin space

🚀 Solution rapide avec Clean ASCII

Avant d’écrire des scripts, passez votre texte dans Clean ASCII pour supprimer ou remplacer les thin spaces en un clic :

Détection du U+2009
Nettoyage ou remplacement ciblé
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Appliquez une normalisation Unicode cohérente (NFC/NFKC) puis une normalisation des espaces
Supprimez les BOM inutiles dans les fichiers UTF-8
Uniformisez les fins de ligne (dos2unix, gitattributes)

🧹 Filtrer

Écrivez des fonctions trim_all() qui retirent U+2009 et autres espaces Unicode
Remplacez U+2009 par un espace simple si nécessaire
Bloquez les caractères non désirés dès l’entrée utilisateur

⚙️ Automatiser

Hooks pre-commit pour refuser des fichiers contenant U+2009 hors zones autorisées
Tests automatisés vérifiant l’absence de thin spaces dans les identifiants/URL
Linting sur le pipeline CI avec règles de normalisation des espaces

Checklist rapide

Fichiers en UTF-8 sans BOM
Fins de ligne uniformes via gitattributes
Affichage des espaces typographiques (dont U+2009) dans l’éditeur
Fonction utilitaire pour supprimer/remplacer le thin space
Tests empêchant la présence d’espaces Unicode indésirables
Consignes internes sur les espaces typographiques et le copier-coller

Conclusion

Le thin space est minuscule mais impactant. Le repérer et le traiter évite des heures de recherche d’erreurs “invisibles”.

Adoptez la détection systématique, normalisez vos espaces et vous éliminerez la majorité des soucis liés aux chaînes et au parsing.

Détectez le thin space maintenant

Utilisez notre outil pour identifier et nettoyer les thin spaces (U+2009) dans vos textes.

Analyser mon texte