Intermédiaire 8 min de lecture 25 janvier 2025

Punctuation Space (U+2008) : ce minuscule espace qui casse tout

Vous voyez un espace ordinaire, mais votre comparaison échoue, votre CSV se décale ou votre regex ne matche plus. Souvent, le coupable s’appelle Punctuation Space (U+2008). Invisible à l’œil nu, il a la largeur d’un signe de ponctuation et n’est pas un espace ASCII. Voici ce que c’est, où il se glisse et comment le repérer rapidement.

Qu'est-ce que « punctuation space » ?

Punctuation Space est un espace Unicode U+2008. Il est conçu pour séparer la ponctuation du texte, a une largeur spécifique (celle d’une virgule) et ne fait pas partie de l’ASCII. Il peut perturber parsers, splits et tris.

Points clés à connaître autour de Punctuation Space et des espaces voisins :

1 Espaces et séparateurs classiques ASCII

Espace, tabulation, retour chariot, saut de ligne. Punctuation Space n’est pas dans cette famille.

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

2 Caractères de contrôle ASCII

Codes 0 à 31 et 127. Ils ne sont pas des espaces, mais leur présence, combinée à U+2008, complique le debugging.

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

3 Espaces et séparateurs Unicode non-standard

Les plus susceptibles d’entrer subrepticement dans vos données :

Punctuation Space (U+2008) — l’espace ciblé ici
NBSP (U+00A0) — Espace insécable
Thin Space (U+2009), Hair Space (U+200A)
ZWSP (U+200B) — Zero Width Space

4 Marques techniques

À connaître, car souvent présents avec des espaces Unicode :

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

Problèmes classiques

Copier-coller depuis le web ou Word

Ajoute U+2008 autour d’une virgule ou d’un point-virgule, perturbant CSV, logs et formats stricts.

Tests unitaires qui échouent

Un U+2008 après une virgule dans une chaîne fausse les égalités et les snapshots.

Trim() ou strip() inefficace

Beaucoup de fonctions ne reconnaissent pas U+2008 et laissent l’espace en place.

Regex \s ou \w incomplètes

Sans mode Unicode, U+2008 n’est pas toujours reconnu comme blanc par le moteur regex.

Exemple de piège autour d’une virgule :

# Deux chaînes visuellement identiques, séparées par une virgule
string1 = "a, b"
string2 = "a, b" # Contient U+2008 après la virgule
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des changements autour de la ponctuation, sans différence visuelle claire
!
Un split sur la virgule fonctionne par endroit, échoue ailleurs (présence possible de U+2008)
!
Un .env contient une clé invalide à cause d’un U+2008 en fin de ligne
!
Votre éditeur saute d’un cran autour d’une virgule quand vous déplacez le curseur
!
Un copier-coller de texte riche insère un espace « spécial » entre nombre et symbole

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII repère immédiatement Punctuation Space (U+2008) dans votre texte, l’identifie clairement et propose un remplacement sûr (espace simple ou suppression) sans toucher au reste.

✅ Détection automatique

U+2008, NBSP, ZWSP, soft hyphens, caractères de contrôle

📊 Analyse précise

Positions exactes, codes Unicode, mise en évidence autour de la ponctuation

🧹 Nettoyage maîtrisé

Remplacement par espace ASCII, retrait ciblé, options configurables

💾 Export propre

Téléchargement du texte corrigé, prêt pour CSV, logs et parsers

Autres méthodes de détection

Affichage dans l'éditeur

Activez "show invisibles" / "render whitespace" pour faire apparaître U+2008
Ajoutez un linter qui surligne Punctuation Space autour de la ponctuation

En ligne de commande (Unix)

# Sortir les octets hors ASCII (U+2008 sera inclus)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Voir les fins de ligne et tabulations, repérer des espaces atypiques
sed -n l fichier.txt
# Afficher les caractères de contrôle et symboles spéciaux
cat -A fichier.txt
# Voir les codes hexadécimaux (U+2008 = e2 80 88)
hexdump -C fichier.txt

En code

JavaScript

str = str.replace(/\u2008/g, ' ')

Python

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

Excel / Google Sheets

UNICODE(MID(cellule;position;1))=8200

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire un script, utilisez Clean ASCII pour détecter et remplacer U+2008 en un clic. Idéal pour assainir un CSV, un .env ou des contenus copiés-collés.

Détection automatique de U+2008
Nettoyage vers espace ASCII
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Appliquez NFC/NFKC puis mappez explicitement U+2008 → espace ASCII
Supprimez les BOM inutiles dans les fichiers UTF-8
Uniformisez les fins de ligne (dos2unix, gitattributes)

🧹 Filtrer

Ajoutez trim_all() pour supprimer U+2008 et autres blancs Unicode
Remplacez U+2008 par espace simple autour de la ponctuation
Bloquez les caractères de contrôle hors LF/CR/HT

⚙️ Automatiser

Hooks pre-commit pour refuser des fichiers contenant U+2008
Tests de sanitation sur les inputs qui suppriment U+2008
Linting CI pour scanner les espaces Unicode problématiques

Checklist rapide

Fichiers en UTF-8 sans BOM, scannés pour U+2008
Fins de ligne uniformes via gitattributes
Affichage des blancs et symboles invisibles activé dans l'éditeur
Fonction de nettoyage remplaçant U+2008 par espace ASCII
Tests garantissant l’absence de U+2008 dans les payloads sensibles
Documentation développeurs sur les espaces Unicode (dont U+2008)

Conclusion

Punctuation Space (U+2008) ressemble à un espace ordinaire, mais il change les résultats de vos parsers et tests.

Détectez-le systématiquement, remplacez-le par un espace ASCII quand il n’est pas indispensable, et évitez des heures de recherche d’erreurs invisibles.

Détectez Punctuation Space (U+2008) maintenant

Utilisez notre outil pour repérer et corriger Punctuation Space et autres espaces Unicode dans vos textes.

Analyser mon texte