Intermédiaire 8 min de lecture 25 janvier 2025

narrow no break space (U+202F) : le caractère discret qui dérègle vos textes

Vous voyez un espace, mais ce n'est pas un espace classique. Dans bien des contenus, un narrow no break space (NNBSP, U+202F) s'invite entre un nombre et un symbole : 10 %, 1 234, 12 :30. Utile en typographie, il peut pourtant casser vos parsers, vos tris ou vos validations si vous ne l'anticipez pas. Voici comment le reconnaître, où il apparaît et comment éviter les surprises.

Qu'est-ce que le narrow no break space (U+202F) ?

C'est une espace fine insécable : un blanc plus étroit qu'une espace classique, qui empêche le retour à la ligne. En UTF‑8, il s'encode E2 80 AF. Visuellement presque indifférenciable, il n'en reste pas moins un caractère distinct.

Où se place-t-il et comment le situer parmi les autres «espaces» :

1 Espaces et séparateurs classiques ASCII

Espace, tabulation, retour chariot, saut de ligne.

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

2 Caractères de contrôle ASCII

Codes 0 à 31 et 127 : NUL, BEL, ESC, etc.

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

3 Espaces et séparateurs Unicode non-standard

Ceux qui posent le plus de problèmes côté dev :

narrow no break space (U+202F) - Espace fine insécable
NBSP (U+00A0) - Espace insécable classique
ZWSP (U+200B) - Zero Width Space
Thin Space (U+2009), Hair Space (U+200A)

4 Marques techniques

BOM, soft hyphen, marques bidirectionnelles :

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

Problèmes classiques avec le narrow no break space

Copier-coller depuis le web, Word ou InDesign

Ajoute un U+202F entre nombres et symboles (10 %, 1 234) qui perturbe CSV, JSON ou commandes.

Tests unitaires qui échouent

Une chaîne contient un U+202F invisible, vos comparaisons strictes ne passent plus.

Trim() ou strip() inefficace

Beaucoup d'implémentations ne suppriment pas U+202F par défaut.

Regex \s ou \w incomplètes

Selon le moteur et les options Unicode, U+202F peut ne pas être capturé.

Exemple de problème courant :

# Deux valeurs qui paraissent identiques mais diffèrent
a = "10 %"
b = "10 %" # U+202F entre 10 et %
assert a == b # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git affiche des changements invisibles autour de « : », « % », « ! »
!
Des parsers CSV ou split() sur l'espace ne fonctionnent pas sur 1 234 ou 10 %
!
Des validations numériques échouent malgré un affichage correct
!
L'éditeur montre un carré/point inhabituel quand le curseur passe sur l'espace
!
Un copier-coller de « 12 :30 » casse une commande ou un script

Comment détecter le narrow no break space

Solution recommandée : Clean ASCII

Clean ASCII identifie instantanément le narrow no break space (U+202F) dans vos textes, signale sa position exacte et propose des remplacements sûrs pour vos pipelines.

✅ Détection automatique

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

📊 Analyse complète

Code Unicode, positions, contexte typographique et impacts

🧹 Nettoyage automatique

Remplacement par espace standard ou normalisation cohérente

💾 Export propre

Téléchargement du texte normalisé prêt à l'usage

Autres méthodes de détection

Affichage dans l'éditeur

Activez l’affichage des caractères invisibles/espaces dans VS Code, JetBrains, Sublime
Installez une extension qui surligne U+202F (narrow no break space)

En ligne de commande (Unix)

# Rechercher U+202F (UTF-8 : E2 80 AF)
grep -P "\x{202F}" -n fichier.txt || grep -P "\xE2\x80\xAF" -n fichier.txt
# Voir les fins de ligne et tabulations
sed -n l fichier.txt
# Afficher les caractères de contrôle et spéciaux
cat -A fichier.txt
# Inspecter les octets
hexdump -C fichier.txt | grep "e2 80 af"

En code

JavaScript

const NNBSP = "\u202F";
const positions = [...str].map((c,i)=>c===NNBSP?i:null).filter(i=>i!==null)

Python

[i for i,c in enumerate(s) if c == "\u202f"]

Excel / Google Sheets

=SUBSTITUE(cellule;CAR(8239);"" ) // 8239 = U+202F

Nettoyer et prévenir le narrow no break space

🚀 Solution rapide avec Clean ASCII

Avant d’écrire des scripts, passez votre texte dans Clean ASCII pour repérer et remplacer U+202F en un clic.

Détection du narrow no break space
Nettoyage ou normalisation typographique
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Appliquez Unicode NFC/NFKC quand c’est pertinent pour homogénéiser
Décidez d’une règle produit : conserver U+202F en affichage, l’ôter en stockage
Uniformisez les fins de ligne et supprimez les BOM inutiles

🧹 Filtrer

Implémentez strip_nnbsp() pour supprimer ou remplacer U+202F
Remplacez U+202F par espace simple lors des comparaisons/tri
Bloquez les caractères de contrôle non souhaités et journalisez leur présence

⚙️ Automatiser

Hooks pre-commit pour refuser U+202F dans le code et les configs
Validation et sanitation des inputs utilisateurs (formulaires, imports)
Linting Unicode dans la CI pour détecter U+202F et similaires

Checklist rapide

Fichiers en UTF-8 sans BOM
Fins de ligne uniformes via gitattributes
Affichage des espaces invisibles activé dans l’éditeur
Fonction de nettoyage ciblant U+202F dans vos libs
Tests vérifiant l’absence de narrow no break space inattendus
Règles produit claires sur l’usage de l’espace fine insécable

Conclusion

Le narrow no break space est précieux pour une typographie soignée, mais piégeux pour les traitements automatiques. En l’identifiant et en le gérant explicitement, vous évitez des heures de débogage.

Définissez une stratégie de normalisation, contrôlez vos entrées et surveillez U+202F dans vos pipelines.

Détectez le narrow no break space maintenant

Utilisez notre outil pour trouver et nettoyer U+202F dans vos textes, exports et contenus web.

Analyser mon texte