Intermédiaire 8 min de lecture 25 janvier 2025

En space (U+2002) : impacts concrets dans vos textes et vos données

L’en space est un espace typographique discret, souvent introduit par copier-coller ou par des outils de mise en forme. Quand il s’invite dans vos CSV, vos identifiants ou votre code, il provoque des bugs subtils. Voici ce que c’est, comment le repérer et comment éviter qu’il ne vous fasse perdre du temps.

Qu'est-ce que l’en space (U+2002) ?

C’est un espace typographique de largeur demi-cadratin, visuellement proche d’un espace normal, mais différent en code et en largeur.

Pour situer l’en space parmi les autres espaces et caractères voisins :

1 Différences avec les espaces ASCII classiques

L’espace standard, la tabulation et les retours chariot/ligne ne sont pas l’en space.

Espace (32), Tab (9), CR (13), LF (10) ≠ EN SPACE (U+2002)

2 À ne pas confondre avec les caractères de contrôle

Les contrôles ASCII ne sont pas des espaces, mais ils perturbent aussi l’analyse.

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

3 Espaces Unicode proches de l’en space

Ils se ressemblent, mais leur code et leur largeur diffèrent :

EN SPACE (U+2002) - Espace demi-cadratin
EM SPACE (U+2003) - Espace cadratin
NBSP (U+00A0) - Espace insécable
THIN SPACE (U+2009), HAIR SPACE (U+200A)

4 Signes techniques à connaître

Ils ne sont pas des en spaces, mais on les rencontre dans les mêmes cas :

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

Problèmes classiques liés à l’en space

Copier-coller depuis le web ou des documents

Ajoute un EN SPACE entre des tokens (emails, IDs) et casse des parsers.

Tests unitaires qui échouent

Une chaîne contient U+2002, les égalités et normalisations simples ne passent plus.

Trim() ou strip() inefficace

Les fonctions basiques visent l’espace ASCII et laissent U+2002 intact.

Regex \s ou \w incomplètes

Selon le moteur, l’en space n’est pas pris en compte comme attendu.

Exemple typique :

# Deux chaînes paraissent identiques mais diffèrent
string1 = "email@domain.com"
string2 = "email@domain.com " # Contient EN SPACE (U+2002) en fin
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git affiche des modifications invisibles autour des ponctuations
!
Un CSV se décale car un EN SPACE se glisse entre deux colonnes
!
Une variable d’environnement refuse de matcher sa clé ou sa valeur
!
Le curseur saute de manière étrange au milieu d’un mot dans l’éditeur
!
Un copier-coller de commande insère un espace non standard et échoue

Comment détecter l’en space

Solution recommandée : Clean ASCII

Clean ASCII repère immédiatement l’en space (U+2002) et les autres espaces typographiques. L’analyse affiche les positions, les codes Unicode et les remplacements conseillés, en temps réel.

✅ Détection automatique

EN SPACE, EM SPACE, NBSP, ZWSP, soft hyphens, contrôles

📊 Analyse complète

Code U+2002 mis en évidence, positions exactes, contexte

🧹 Nettoyage automatique

Remplacement intelligent par espace ASCII si souhaité

💾 Export propre

Texte prêt à l’emploi sans en spaces indésirables

Autres méthodes de détection

Affichage dans l’éditeur

Activez "render whitespace" et faites apparaître U+2002 dans les vues invisibles
Utilisez un linter/extension qui surligne EN SPACE et autres espaces Unicode

En ligne de commande (Unix)

# Détecter les octets hors ASCII imprimable (dont U+2002)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Visualiser les fins de ligne, tabulations et espaces
sed -n l fichier.txt
# Afficher les caractères non imprimables
cat -A fichier.txt
# Inspecter les codes hexadécimaux
hexdump -C fichier.txt

En code

JavaScript

Array.from(str).filter(c => c.charCodeAt(0) === 0x2002)

Python

[i for i, c in enumerate(s) if ord(c) == 0x2002]

Excel / Google Sheets

CODE(MID(cellule;position;1)) = 8194 # 8194 = U+2002

Nettoyer et prévenir l’en space indésirable

🚀 Solution rapide avec Clean ASCII

Avant d’écrire un script, faites un passage avec Clean ASCII pour repérer et remplacer U+2002 là où il n’est pas souhaité.

Détection automatique
Nettoyage intelligent
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Utilisez NFC/NFKC si votre pipeline impose les espaces ASCII
Supprimez les BOM inutiles, qui compliquent le parsing avec les espaces
Uniformisez les fins de ligne pour limiter les écarts visuels

🧹 Filtrer

Créez une fonction strip_en_space() qui remplace U+2002 par 0x20
Autorisez l’en space seulement en rendu (UI), pas en identifiants ni en clés
Bloquez les caractères de contrôle sauf LF/CR/HT pour isoler les vrais espaces

⚙️ Automatiser

Hooks pre-commit refusant U+2002 dans les fichiers critiques (code, .env, CSV)
Tests de validation sur les inputs utilisateurs avec liste blanche d’espaces
Linting en CI pour détecter U+2002 et autres espaces Unicode non souhaités

Checklist rapide

Fichiers en UTF-8 sans BOM
Fins de ligne uniformes via gitattributes
Affichage des blancs activé dans l’éditeur (incluant U+2002)
Fonction de nettoyage ciblant l’en space et les espaces Unicode
Tests empêchant U+2002 dans les identifiants, URLs et clés
Documentation interne sur les espaces Unicode et leur usage

Conclusion

L’en space U+2002 est utile en typographie, mais source d’erreurs silencieuses dans les données et le code.

En le détectant systématiquement et en appliquant des règles de nettoyage, vous éliminez une grande partie des soucis d’analyse et de validation.

Repérez l’en space dans vos contenus

Utilisez notre outil pour identifier et remplacer l’en space et autres espaces Unicode non désirés.

Analyser mon texte