Intermédiaire 8 min de lecture 25 janvier 2025

Smart quotes (“guillemets typographiques”) : erreurs fréquentes et comment les éviter

Les guillemets droits ' " deviennent souvent des guillemets courbes “ ” ou ‘ ’ après un copier‑coller. Résultat : JSON invalide, CSV mal parsé, commandes shell qui plantent, tests qui échouent. Voici comment reconnaître ces caractères, comprendre leurs impacts et les neutraliser.

Qu'est-ce que les “smart quotes” ?

Ce sont des guillemets et apostrophes typographiques qui se courbent “comme ceci” ou ‘comme cela’, différents des guillemets ASCII droits.

Les familles de guillemets et signes apparentés à connaître :

1 Guillemets droits ASCII

Caractères sûrs pour le code, les CSV et les formats sérialisés.

Double quote (34) ", Single quote (39) ', Backtick (96) `

2 Guillemets typographiques Unicode

Remplacent souvent les quotes droites après un copier‑coller.

“ (U+201C), ” (U+201D), ‘ (U+2018), ’ (U+2019)

3 Variantes internationales

Styles utilisés selon la langue ou la typographie :

« (U+00AB), » (U+00BB) — guillemets français
‹ (U+2039), › (U+203A) — chevrons simples
„ (U+201E), “ (U+201C) — style allemand
「 (U+300C), 」 (U+300D), 『 (U+300E), 』 (U+300F) — style japonais

4 Pièges techniques et confusions

Souvent confondus avec des quotes ou utilisés par erreur :

’ (U+2019) — apostrophe typographique vs ' (39)
′ (U+2032), ″ (U+2033) — primes (minutes/secondes) vs quotes
« » dans du code ou du JSON — caractères non valides pour les parseurs
Auto-correction des éditeurs qui convertit ' et " en “ ” / ‘ ’

Problèmes classiques

Copier-coller depuis le web ou Word

Transforme " et ' en “ ” et ‘ ’, rendant JSON, YAML, SQL ou CSV invalides.

Tests unitaires qui échouent

Une chaîne utilise ’ au lieu de ' et ne correspond plus aux attentes des assertions.

Trim() ou strip() inefficace

Les fonctions de nettoyage ne ciblent pas “ ” et ‘ ’ si vous ne les remplacez pas explicitement.

Regex \s ou \w incomplètes

Vos expressions ciblent " et ' mais oublient “ ” ‘ ’, laissant passer des cas critiques.

Exemple de problème courant :

# Deux JSON qui semblent identiques mais pas pour le parseur
string1 = "{\"name\":\"Jean\"}"
string2 = " {“name”:“Jean”} " # Utilise “ ” au lieu de " "
assert string1 == string2 # ❌ Échec

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre uniquement des changements de " en “ ” ou ' en ’
!
Un CSV casse car l’import n’interprète pas “ ” comme séparateurs de texte
!
Un .env ignore KEY=“value” alors que KEY="value" fonctionne
!
Le curseur s’arrête sur un caractère différent quand vous traversez un ’
!
Une commande collée dans le terminal avec “ ” renvoie “command not found”

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII repère instantanément les smart quotes et vous indique où elles se trouvent. Il différencie les quotes ASCII des versions typographiques et propose des remplacements sûrs.

✅ Détection automatique

“ ”, ‘ ’, « », „ “, primes ′ ″ et variantes

📊 Analyse complète

Codes Unicode, positions exactes, contexte d’apparition

🧹 Nettoyage automatique

Conversion vers ' et " adaptés aux formats techniques

💾 Export propre

Téléchargement du texte normalisé prêt à intégrer

Autres méthodes de détection

Affichage dans l'éditeur

Désactivez la conversion auto des guillemets (“smart quotes”) dans VS Code, JetBrains, Sublime
Installez un linter qui surligne “ ”, ‘ ’, « » dans les fichiers de code

En ligne de commande (Unix)

# Lister les caractères hors ASCII (inclut “ ”, ‘ ’)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Visualiser les caractères spéciaux
sed -n l fichier.txt
# Afficher les caractères non imprimables et Unicode
cat -A fichier.txt
# Examiner les codes hexadécimaux (U+2018, U+2019, U+201C, U+201D)
hexdump -C fichier.txt

En code

JavaScript

str.replace(/[\u2018\u2019]/g,"'").replace(/[\u201C\u201D]/g,'"')

Python

s.translate({0x2018:ord("'"),0x2019:ord("'"),0x201C:ord('"'),0x201D:ord('"')})

Excel / Google Sheets

=SUBSTITUTE(SUBSTITUTE(A1;UNICHAR(8220);"""");UNICHAR(8221);"""")

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Avant de bricoler des scripts, utilisez Clean ASCII pour repérer et convertir automatiquement les smart quotes en guillemets droits adaptés à vos formats.

Détection des “ ”, ‘ ’, « »
Nettoyage et normalisation sûrs
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Appliquez une normalisation Unicode (NFKC) puis remplacez “ ”, ‘ ’ par " et '
Uniformisez les guillemets français « » si vous les conservez en contenu éditorial
Conservez des quotes ASCII dans le code, la config, le JSON, le CSV

🧹 Filtrer

Écrivez une fonction normalize_quotes() qui remplace “ ” ‘ ’ « » par des équivalents sûrs
Corrigez la confusion prime/apostrophe (′ → ', ″ → ")
Empêchez l’entrée de smart quotes dans les formulaires ou dans les champs code

⚙️ Automatiser

Hooks pre-commit pour refuser des fichiers contenant “ ” ‘ ’ dans les dossiers de code
Tests qui valident la normalisation des quotes sur les entrées utilisateurs
Linting sur la CI pour signaler toute occurrence de smart quotes

Checklist rapide

Éditeur configuré pour ne pas convertir automatiquement ' et " en “ ” / ‘ ’
Règles de linter interdisant les smart quotes dans le code et les configs
Fonction utilitaire normalize_quotes() disponible dans vos libs
Contrôle systématique des contenus collés (back-office, CMS, formulaires)
Tests qui vérifient l’absence de “ ” ‘ ’ dans les artefacts techniques
Documentation claire sur l’usage des guillemets en contenu vs en code

Conclusion

Les smart quotes sont élégantes en typographie, mais dangereuses dans les formats techniques. Les repérer tôt évite des heures de débogage.

Normalisez vos flux, bloquez leur apparition dans le code et automatisez les contrôles pour des imports et déploiements sans mauvaises surprises.

Détectez les smart quotes maintenant

Utilisez notre outil pour identifier et normaliser les guillemets typographiques dans vos textes.

Analyser mon texte