Intermédiaire 8 min de lecture 25 janvier 2025

EM SPACE (U+2003) : comprendre, détecter et corriger

L’em space ressemble à un simple blanc, mais il n’en est pas un. Il se glisse dans vos champs, vos gabarits ou vos CSV et provoque des comportements inattendus : trims inefficaces, parsers récalcitrants, comparaisons fausses. Voici ce qu’est l’em space, où il se cache et comment le neutraliser proprement.

Qu'est-ce que l'em space ?

L’em space est un espace typographique de largeur cadratin (souvent la largeur du “M”) : il paraît vide, mais sa largeur est bien plus grande qu’un espace normal.

Points essentiels à connaître sur l’em space :

1 Définition et encodage

Caractère Unicode large, utilisé pour la typographie fine.

EM SPACE U+2003 • HTML:   • UTF-8: E2 80 83

2 Espaces proches à ne pas confondre

Plusieurs espaces typographiques ressemblent à l’em space mais n’ont pas la même largeur.

EN SPACE (U+2002), THIN SPACE (U+2009), HAIR SPACE (U+200A), FIGURE SPACE (U+2007)

3 Pourquoi il pose problème en développement

Son apparence “vide” trompe les yeux, pas les machines :

Trim/sanitization incomplets si seul l’espace ASCII est géré
Comparaisons strictes qui échouent (chaînes “identiques” visuellement)
Alignements, colonnes fixes, parsers CSV perturbés
Copier-coller depuis le web qui injecte   dans du contenu

4 Particularités techniques

Influencé par la police et le contexte typographique :

Largeur relative au cadratin, variable selon la fonte
Peut se normaliser selon les règles de compatibilité ou rester distinct
Non équivalent à l’espace insécable (NBSP U+00A0)

Problèmes classiques

Copier-coller depuis le web ou des CMS

Ajoute des   dans des titres, slugs ou champs qui doivent rester “propres”.

Tests unitaires qui échouent

Un U+2003 isolé change la chaîne et fait rater vos assertions.

Trim() ou strip() inefficace

Ne supprime que l’espace ASCII, laisse U+2003 en place.

Regex \s ou \w incomplètes

Selon le moteur, l’em space n’est pas couvert comme prévu par \s.

Exemple de problème courant :

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

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des changements d’espacement impossibles à voir précisément
!
Split() ou parse CSV décalé à cause d’un caractère large entre deux champs
!
Une clé .env échoue alors que la ligne semble correcte (em space en fin de ligne)
!
Le curseur “saute” sur une zone vide anormalement large
!
Un copier-coller dans un terminal ajoute un blanc “trop large” et casse la commande

Comment le détecter

Solution recommandée : Clean ASCII

Clean ASCII repère instantanément l’em space et les autres espaces typographiques. Vous voyez où se trouve U+2003, avec son code et ses positions exactes, puis vous appliquez un remplacement sûr.

✅ Détection automatique

EM SPACE (U+2003), EN SPACE, THIN SPACE, FIGURE SPACE, etc.

📊 Analyse complète

Codes Unicode, emplacements, aperçu visuel et conseils de remplacement

🧹 Nettoyage automatique

Conversion vers espace ASCII ou NBSP selon votre besoin

💾 Export propre

Téléchargement du texte nettoyé, prêt pour vos pipelines

Autres méthodes de détection

Affichage dans l'éditeur

Activez “show invisibles”, “render whitespace” pour voir U+2003
Linter/extension qui surligne   et les espaces Unicode

En ligne de commande (Unix)

# Extraire les octets hors ASCII imprimable (inclut U+2003)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Voir les fins de ligne et tabulations
sed -n l fichier.txt
# Afficher les caractères de contrôle
cat -A fichier.txt
# Inspecter l’hexadécimal
hexdump -C fichier.txt

En code

JavaScript

Array.from(str).map(c => c.charCodeAt(0).toString(16))

Python

[f"{ord(c):04x}" for c in s if c == "\u2003"]

Excel / Google Sheets

CODE(MID(cellule;position;1)) = 8195 /* 8195 = U+2003 */

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire du code spécifique, passez votre texte dans Clean ASCII pour repérer et convertir l’em space en un espace conforme à votre contexte.

Détection ciblée de U+2003
Remplacement intelligent (ASCII ou NBSP)
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Uniformisez vos espaces : remplacez U+2003 par U+0020 ou U+00A0 selon les règles métier
Appliquez une normalisation Unicode cohérente puis un filtrage dédié des espaces typographiques
Conservez des fins de ligne homogènes (dos2unix, gitattributes)

🧹 Filtrer

Ajoutez une fonction trim_em_space() qui supprime U+2003 en bordure
Remplacez l’em space interne par un espace simple si la sémantique ne l’exige pas
Bloquez l’injection d’espaces typographiques dans les inputs utilisateurs

⚙️ Automatiser

Pre-commit qui échoue si U+2003 est trouvé dans le code source
Validation backend des champs texte avec liste blanche d’espaces
Linting CI pour détecter les espaces typographiques indésirables

Checklist rapide

Règles claires sur l’usage de l’em space dans vos contenus
Filtres de normalisation qui remplacent U+2003 si non requis
Affichage des espaces spéciaux activé dans l’éditeur
Fonctions utilitaires pour supprimer/convertir U+2003 en entrée
Tests automatisés contre la présence de l’em space dans les champs critiques
Documentation interne sur les espaces Unicode (em, en, thin, etc.)

Conclusion

L’em space est discret mais impactant. En l’identifiant tôt, vous évitez des heures passées à chercher un “blanc” qui n’en est pas un.

Intégrez sa détection dans vos outils, normalisez vos entrées, et vos traitements texte resteront fiables et prévisibles.

Détectez l'em space maintenant

Utilisez notre outil pour repérer et convertir l’em space dans vos textes et gabarits.

Analyser mon texte