Intermédiaire 8 min de lecture 25 janvier 2025

Bullet character : affichage, normalisation et problèmes courants

Vous copiez une liste depuis le web ou Word, et soudain un import CSV déraille, une comparaison échoue, un rendu Markdown diffère. Le coupable est souvent le bullet character (•). Visible mais pas toujours attendu, il change la sémantique des chaînes. Voici comment le reconnaître, le maîtriser et éviter qu’il ne s’infiltre là où il ne doit pas.

Qu'est-ce qu'un bullet character ?

C’est un symbole typographique utilisé pour les listes. Le plus courant est U+2022 (•), mais plusieurs variantes existent et se confondent facilement.

Voici les principales variantes et caractères proches :

1 Variantes ASCII et équivalents simples

Marqueurs de liste usuels en texte brut : tiret, astérisque, plus.

- (tiret), * (astérisque), + (plus)

2 Caractères proches souvent confondus

Visuellement similaires mais sémantiquement différents.

Middle Dot (U+00B7) ·, Bullet Operator (U+2219) ∙, Black Circle (U+25CF) ●

3 Bullets Unicode et variantes typographiques

Les plus pertinents à connaître :

Bullet (U+2022) •
Hyphen Bullet (U+2043) ⁃
White Bullet (U+25E6) ◦
Triangular Bullet (U+2023) ‣

4 Bullets selon les formats

HTML, Markdown, Word/RTF n’utilisent pas toujours la même représentation :

HTML: listes rendues via CSS, texte peut contenir •
Markdown: -, * ou + convertis en puces
RTF/Word: puces automatiques converties en U+2022
PDF/Copy-paste: substitution contextuelle vers •

Problèmes classiques

Copier-coller depuis le web ou Word

Introduit des • dans des CSV, des champs texte ou du code à la place de - ou * attendus.

Tests unitaires qui échouent

Une chaîne contient un bullet character (•) là où un tiret est attendu : les égalités exactes échouent.

Trim() ou strip() inefficace

Les nettoyages ciblent l’espace et la ponctuation ASCII, mais laissent passer •, ⁃, ◦ ou ●.

Regex \s ou \w incomplètes

Les classes génériques ignorent les puces Unicode ; il faut cibler explicitement U+2022, U+2043, U+25E6…

Exemple de piège avec bullet character :

# Deux chaînes visuellement proches
string1 = "- Tâche"
string2 = "• Tâche" # Contient U+2022 au début
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre des changements de listes alors que vous n’avez rien modifié
!
Des exports CSV ou JSON contiennent des • au milieu de champs
!
Un .env ou une commande reçoit un • depuis un copier-coller et casse la lecture
!
Votre éditeur affiche une puce typographique alors que vous attendiez un tiret
!
Une conversion HTML ↔ Markdown produit des puces incohérentes

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII identifie le bullet character (•) et ses variantes proches dans vos textes. Il met en évidence les occurrences, leur code Unicode et propose des conversions cohérentes pour vos conventions de liste.

✅ Détection automatique

Puces Unicode (•, ⁃, ◦), symboles proches (·, ●, ∙)

📊 Analyse complète

Codes U+, positions exactes, prévisualisation du remplacement

🧹 Nettoyage automatique

Conversion vers - ou * selon vos standards Markdown

💾 Export propre

Téléchargement du texte normalisé, prêt pour la CI

Autres méthodes de détection

Affichage dans l'éditeur

Activez la mise en évidence des caractères ambigus et affichez le code point
Recherchez les motifs Unicode (ex: \u2022, \u2043, \u25E6)

En ligne de commande (Unix)

# Repérer les bullets courants en UTF-8
grep -P "[\xE2\x80\xA2|\xE2\x81\x83|\xE2\x97\xA6|\xC2\xB7|\xE2\x88\x99]" fichier.txt
# Compter les occurrences par code point
grep -oP "\xE2\x80\xA2|\xE2\x81\x83|\xE2\x97\xA6" fichier.txt | sort | uniq -c
# Afficher les caractères non attendus pour inspection
cat -A fichier.txt
# Voir les octets pour confirmer le code
hexdump -C fichier.txt

En code

JavaScript

str.replace(/[\u2022\u2043\u25E6\u00B7\u2219]/g, '- ')

Python

re.sub(r"[\u2022\u2043\u25E6\u00B7\u2219]", "- ", s)

Excel / Google Sheets

SUBSTITUE(cellule; "•"; "- ")

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant d’écrire des scripts, utilisez Clean ASCII pour remplacer les bullet characters par les marqueurs de liste que vous autorisez.

Détection automatique
Nettoyage intelligent
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Uniformisez les marqueurs de liste: remplacez • par - ou * selon votre convention
Convertissez correctement HTML/RTF vers Markdown pour éviter l’injection de •
Évitez les puces décoratives dans les champs techniques (logins, IDs)

🧹 Filtrer

Écrivez une fonction normalize_bullets() pour supprimer ou convertir toutes les puces
Remplacez •, ⁃, ◦, ● par - ou * dans les zones non typographiques
Bloquez les puces Unicode via validation d’entrée et règles de sérialisation

⚙️ Automatiser

Hooks pre-commit: refuser des fichiers contenant U+2022 hors dossiers docs
Tests de sanitation sur les entrées utilisateur pour éliminer les puces non prévues
Linting CI pour normaliser les listes dans Markdown et contenus

Checklist rapide

Convention de projet: listes en Markdown avec - ou *
Converteurs HTML/RTF ↔ Markdown configurés
Outil d’éditeur pour afficher le code point du caractère sélectionné
Fonction de normalisation des puces intégrée à vos libs
Tests empêchant les puces Unicode dans les champs métiers
Documentation équipe sur l’usage des bullets et alternatives ASCII

Conclusion

Le bullet character est anodin en apparence, mais peut interrompre une pipeline, casser un parseur ou fausser un rendu.

Adoptez une convention claire, détectez systématiquement les puces Unicode et normalisez vos contenus pour éviter les écarts entre environnements.

Détectez les bullet characters maintenant

Utilisez notre outil pour identifier et convertir les bullet characters (•) dans vos textes.

Analyser mon texte pour bullet character