Intermédiaire 8 min de lecture 25 janvier 2025

Carriage Return (CR) : comprendre et maîtriser les retours chariot

Le retour chariot CR (carriage return, caractère ASCII 13, noté \r) est au cœur des soucis de fins de ligne. Entre CR, LF et CRLF, les différences de plateformes provoquent des bugs silencieux : parsing cassé, diffs illisibles, tests qui échouent. Voici l’essentiel pour identifier et corriger tout ce qui tourne autour de CR.

Qu'est-ce que le Carriage Return (CR) ?

CR est un caractère de contrôle historique issu des machines à écrire. Il ramène le curseur en début de ligne. En informatique moderne, il intervient dans les fins de ligne, souvent en duo avec LF.

Les principales familles liées aux retours et séparateurs de lignes :

1 Retours et séparateurs ASCII classiques

CR, LF, combinaison CRLF, ainsi que la tabulation.

CR (13), LF (10), CRLF (13 10), Tab (9)

2 Caractères de contrôle ASCII

CR fait partie des codes 0 à 31 et 127 : retours, tabulations, échappements.

CR (13), LF (10), NUL (0), ESC (27), DEL (127)

3 Séparateurs Unicode de ligne

D’autres séparateurs peuvent coexister avec CR/LF selon les sources :

Line Separator (U+2028)
Paragraph Separator (U+2029)
Next Line (U+0085) - NEL
Form Feed (U+000C) - FF

4 Marques techniques et contexte

Encodages et marqueurs influencent la détection de CR/LF :

BOM (U+FEFF) - peut compliquer l’analyse en tête de fichier
CRLF (Windows) vs LF (Unix) - conventions différentes
Ancien Mac OS - lignes terminées uniquement par CR

Problèmes classiques

Copier-coller entre Windows et Unix

Ajoute des CRLF dans des fichiers attendus en LF, ou insère des CR isolés (CR seul).

Tests unitaires qui échouent

Une chaîne contient un CR caché en fin de ligne et casse l’assertion textuelle.

Trim() ou strip() inefficace

Nettoie les bords mais laisse des CR au milieu des champs, provoquant des coupures inattendues.

Regex multi-lignes imprécises

Le moteur ne gère pas CR comme séparateur attendu et la correspondance par ligne échoue.

Exemple de problème courant :

# Deux chaînes visuellement identiques mais différentes par la fin de ligne
string1 = "line1\nline2"
string2 = "line1\r\nline2" # Contient CRLF
assert string1 == string2 # ❌ Échec (CR présent)

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Un diff git montre tout le fichier modifié à cause des fins de ligne (LF ⇆ CRLF)
!
Des parsers/CSV séparent mal les lignes à cause d’un CR isolé
!
Un .env ou un script shell refuse une variable car un CR traîne en fin de ligne
!
Votre éditeur affiche ^M ou un symbole quand vous déplacez le curseur
!
Un copier-coller dans un terminal insère un CR et casse la commande

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII repère immédiatement les retours chariot CR, les LF et les séquences CRLF. L’analyse vous montre où les fins de ligne diffèrent, avec les codes exacts et des propositions de normalisation.

✅ Détection automatique

CR, LF, CRLF, séparateurs Unicode de ligne

📊 Analyse complète

Positions, comptages par type de fin de ligne, impact potentiel

🧹 Nettoyage automatique

Conversion CRLF → LF ou LF → CRLF selon votre convention

💾 Export propre

Téléchargement avec fins de ligne uniformisées

Autres méthodes de détection

Affichage dans l'éditeur

Activez l’affichage des fins de ligne et symboles invisibles (^M pour CR)
Standardisez l’EOL par défaut de l’éditeur (LF ou CRLF)

En ligne de commande (Unix)

# Repérer les CR dans un fichier
grep -nP "\r" fichier.txt
# Voir clairement les fins de ligne
sed -n l fichier.txt
# Afficher CR et autres contrôles
cat -A fichier.txt
# Inspecter en hexadécimal (0d = CR, 0a = LF)
hexdump -C fichier.txt

En code

JavaScript

const lines = str.split(/\r\n|\n|\r/);

Python

s_norm = s.replace("\r\n", "\n").replace("\r", "\n")

Excel / Google Sheets

SUBSTITUE(A1;CAR(13);"")

Nettoyer et prévenir

🚀 Solution rapide avec Clean ASCII

Pour uniformiser les fins de ligne sans script, utilisez Clean ASCII et remplacez automatiquement CRLF par LF (ou inversement) en un clic.

Détection CR/LF/CRLF
Nettoyage et normalisation
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Décidez d’une convention (LF ou CRLF) et appliquez-la partout
Utilisez dos2unix/unix2dos pour convertir rapidement
Paramétrez l’éditeur et .gitattributes pour fixer les fins de ligne

🧹 Filtrer

Implémentez normalize_eol() qui remplace CRLF/CR par LF
Nettoyez les CR isolés importés d’anciens fichiers Mac
Empêchez l’injection de CR dans les en-têtes (HTTP, CSV, logs)

⚙️ Automatiser

Hooks pre-commit pour refuser des fichiers hors convention EOL
Validation des entrées utilisateurs pour supprimer les CR inattendus
Linting EOL sur la CI et documentation de l’équipe

Checklist rapide

Fichiers en UTF-8 sans BOM
Fins de ligne uniformes via gitattributes
Éditeur configuré pour afficher et fixer CR/LF
Fonction de normalisation des fins de ligne dans vos libs
Tests vérifiant l’absence de CR indésirables dans les données
Documentation équipe sur CR/LF/CRLF et outils de conversion

Conclusion

Le Carriage Return (CR) est discret mais déterminant pour la fiabilité des traitements texte. En maîtrisant CR, LF et CRLF, vous éliminez une grande part des bugs multi-plateformes.

Standardisez vos fins de ligne, automatisez les vérifications et détectez tôt les CR indésirables pour gagner du temps et de la stabilité.

Vérifiez vos retours chariot (CR) maintenant

Utilisez notre outil pour identifier, normaliser et nettoyer les fins de ligne CR/LF/CRLF dans vos textes.

Analyser mon texte