Pourquoi les guillemets typographiques cassent votre code (et comment les corriger)

Les guillemets courbes sont plus beaux que les guillemets droits, mais ils corrompent silencieusement le code, les fichiers de config et les commandes shell. Apprenez à les repérer et les éliminer.

Le saboteur silencieux

Vous copiez un extrait de code depuis un article de blog, le collez dans votre terminal, et obtenez une erreur cryptique. Le code a l'air correct. Dix minutes plus tard, vous remarquez : les guillemets sont légèrement courbés. Ce sont des guillemets typographiques (aussi appelés guillemets courbes ou guillemets éditoriaux), et ils cassent le code.

C'est l'une des sources les plus fréquentes de bugs invisibles pour les développeurs, surtout lors de copies depuis :

  • Les traitements de texte (Word, Google Docs)
  • Les éditeurs CMS (WordPress, Medium, Notion)
  • Les documents PDF
  • Certains clients e-mail
  • Les textes générés par IA formatés pour la lecture plutôt que l'exécution

Guillemets droits vs guillemets typographiques

Guillemets droits (ce que le code attend) :

  • ' – U+0027, apostrophe / guillemet simple ASCII
  • " – U+0022, guillemet double ASCII

Guillemets typographiques (insérés par les traitements de texte) :

  • ' – U+2018, guillemet simple gauche
  • ' – U+2019, guillemet simple droit / apostrophe
  • " – U+201C, guillemet double gauche
  • " – U+201D, guillemet double droit

Ces caractères sont entièrement différents de leurs équivalents ASCII. Aucun langage de programmation, shell ou format de config ne les considère équivalents.

Ce qui casse

Commandes shell – bash, zsh, PowerShell utilisent tous des guillemets ASCII pour délimiter les chaînes. Les guillemets typographiques provoquent une erreur de syntaxe.

JSON – JSON exige U+0022 (") pour les délimiteurs de chaînes. Les guillemets doubles typographiques génèrent une erreur de parsing dans tous les parsers JSON.

Python, JavaScript, PHP – les littéraux de chaînes doivent utiliser des guillemets ASCII. Les guillemets typographiques causent une SyntaxError.

Fichiers de config – YAML, TOML, .env, config SSH – tous attendent de l'ASCII.

D'où viennent les guillemets typographiques

La plupart des traitements de texte appliquent une autocorrection qui remplace les guillemets droits par des guillemets courbes au fur et à mesure de la saisie. Cela rend la prose typographiquement plus correcte, mais invalide tout code dans le document.

Comment les trouver et les corriger

Dans un éditeur de code

La plupart des éditeurs supportent la recherche par regex. Le motif [''""‛‟] repère les variantes courantes de guillemets typographiques. Cherchez et remplacez par le caractère ASCII approprié.

Avec un outil de nettoyage de texte

Le Nettoyeur Typographique de ce site convertit tous les guillemets courbes, les points de suspension (......), les tirets longs et autres caractères typographiques vers leurs équivalents ASCII en un clic.

Dans le terminal

sed -i "s/\xe2\x80\x98/'/g; s/\xe2\x80\x99/'/g; s/\xe2\x80\x9c/\"/g; s/\xe2\x80\x9d/\"/g" fichier.txt

Désactiver l'autocorrection à la source

Dans Word : Fichier → Options → Vérification → Options de correction automatique → onglet "AutoFormat au cours de la frappe" → décocher "Remplacer les guillemets droits par des guillemets typographiques".

Dans Google Docs : Outils → Préférences → décocher "Utiliser des guillemets intelligents".

Le problème des points de suspension

Le même problème s'applique au caractère points de suspension ... (U+2026), qui ressemble à ... (trois points) mais n'est pas équivalent en code. Si vous collez ... dans une regex ou un fichier de config attendant ..., cela échouera silencieusement.

En résumé

Les guillemets typographiques sont des améliorations visuelles conçues pour la lecture de texte, pas pour l'écriture de code. Ce sont des caractères Unicode différents des guillemets ASCII et ils cassent tout code, toute config ou toute commande shell. Travaillez toujours dans un éditeur de texte brut (VS Code, Sublime, Vim) et nettoyez le texte collé avant de l'utiliser.