Français

Texte et outils quotidiens · Boîte à outils de texte

CR, LF et CRLF : d'où viennent les fins de ligne et pourquoi les sauts de texte collés

· Contexte

fins de ligne nettoyage de texte exportations de données

Caractères de contrôle de retour chariot et de saut de ligne joignant et séparant des lignes de texte
Illustration vectorielle originale de ToolAcre

Explique les origines du télétype du retour chariot et du saut de ligne, pourquoi les systèmes d'exploitation ont choisi des conventions différentes et comment ces choix apparaissent sous forme de lignes vides doublées et de caractères parasites dans le texte collé.

L'export avec une ligne vide après chaque ligne - pourquoi un fichier d'un autre système est collé avec deux fois plus de lignes

Vous collez une exportation sur trois lignes et voyez une ligne vide après chaque enregistrement. Il est tentant de blâmer Windows CRLF immédiatement, mais une zone de texte conforme aux normes présente normalement des sauts de ligne sous une forme normalisée. Les lignes doublées signifient plus souvent qu'une conversion antérieure traitait le retour chariot et le saut de ligne comme deux séparateurs indépendants, ou insérait une nouvelle ligne supplémentaire entre les enregistrements.

Conservez l'original jusqu'à ce que vous sachiez quelle étape l'a modifié. Comparez la source dans un éditeur capable de révéler des caractères de contrôle, puis comparez le nombre de lignes collées. ToolAcre accepte délibérément CRLF, LF et Lone CR comme une limite chacun, donc un fichier intact de trois enregistrements devrait produire trois lignes au lieu de six simplement parce qu'il provient de Windows.

Une ligne vide supplémentaire est un symptôme et non une preuve que le CRLF seul en est la cause.

Les noms décrivent des actions physiques sur les terminaux d'impression. Un retour chariot a déplacé le chariot au début de la ligne actuelle, tandis qu'un saut de ligne a avancé le papier à la ligne suivante. Il s’agissait de contrôles distincts car l’une ou l’autre motion pouvait être demandée indépendamment. ASCII les a conservés comme caractères de contrôle CR en décimal 13 et LF en décimal 10.

Les écrans modernes ne déplacent plus le papier, mais les valeurs en octets ont survécu dans les fichiers, les protocoles et les interfaces de programmation. L'historique explique pourquoi CR et LF ne sont pas des signes de ponctuation interchangeables et pourquoi CRLF est une séquence de deux caractères. Cela ne signifie pas que chaque application moderne les traite séparément ; les analyseurs reconnaissent généralement la paire comme une fin de ligne logique.

Trois conventions : LF sur Unix et macOS moderne, CRLF sur Windows, CR sur Mac OS classique, et pourquoi chacune semblait raisonnable

Les systèmes Unix et de type Unix utilisent classiquement LF pour une fin de ligne, et macOS moderne suit cette convention. Les fichiers texte Windows utilisent classiquement CRLF. Mac OS classique utilisait CR seul, mais Mac OS X a adopté la fondation Unix et LF. Ces choix restent visibles lorsque les outils échangent du texte brut sans se mettre d’accord sur la normalisation.

Aucune convention ne rend les mots eux-mêmes différents. Le problème apparaît à une frontière dont le lecteur n'attend qu'une seule représentation ou se divise naïvement sur chaque caractère de contrôle. Un analyseur de ligne robuste vérifie CRLF par paire avant de vérifier seul CR ou LF. ToolAcre fait exactement cela avec le modèle ordonné ` | | `, rejoint ensuite la sortie transformée avec LF.

Que se passe-t-il dans une zone de texte de navigateur : comment les sauts de ligne sont généralement normalisés lors du collage et où les caractères parasites apparaissent toujours

HTML définit une gestion spéciale pour les sauts de ligne dans les contrôles de texte. Dans une valeur de zone de texte, les navigateurs normalisent CRLF et CR solitaire en LF dans la valeur exposée, tandis que la soumission de formulaire peut appliquer les règles de données de formulaire pour les sauts de ligne. Par conséquent, un collage qui semble correct dans la boîte peut toujours être sérialisé différemment par une autre couche ou copié dans un logiciel selon une autre convention.

Des CR parasites peuvent toujours apparaître lorsque du texte contourne une zone de texte normale, lorsque des octets échappés tels que les caractères littéraux `\r` sont affichés, ou lorsqu'un analyseur se divise uniquement sur LF et laisse CR attaché à chaque champ. Le navigateur n'est qu'une étape du chemin, et non un service de réparation universel pour les fichiers, les producteurs de presse-papiers, les API et les consommateurs de ligne de commande.

Les navigateurs normalisent les sauts de ligne dans la zone de texte, mais les formats du presse-papiers et en aval diffèrent toujours

Les lignes vides et les retours chariot de fin nécessitent des diagnostics différents. Supprimer les lignes vides supprime les lignes dont le contenu est vide ou blanc une fois que ToolAcre a reconnu les trois styles de fin de ligne. Trim Lines supprime les espaces de début et de fin de chaque ligne. Étant donné que le séparateur de ToolAcre consomme un véritable séparateur CR, le découpage n'est normalement pas nécessaire simplement pour effacer ce séparateur.

Utilisez le découpage uniquement lorsqu'il reste des espaces, des tabulations ou un caractère littéral non utilisé, et inspectez l'indentation significative avant de la modifier. Si le texte contient `^M` visible, déterminez si le spectateur affiche un CR réel ou ces deux caractères imprimables. Un remplacement global peut endommager le contenu prévu, tandis que la vérification des décomptes avant et après donne un résultat révisable.

Supprimer les lignes vides corrige les lignes vides ; le découpage est généralement inutile une fois que ToolAcre divise correctement le CR

Pour un exemple reproductible, commencez par trois noms dont la représentation intermédiaire endommagée contient une ligne vide entre chaque nom : `Ada`, vide, `Grace`, vide, `Linus`. Le compteur de mots et de caractères affiche cinq lignes. Il s’agit d’une contribution délibérément doublée ; une véritable séquence CRLF à elle seule serait reconnue comme une limite et ne créerait pas ces lignes vides dans ToolAcre.

Choisissez Supprimer les lignes vides et la sortie devient trois lignes jointes avec LF. Le compteur devrait maintenant en signaler trois. Si les valeurs importées comportent également un remplissage, exécutez Trim Lines séparément et examinez le résultat. La séparation de ces opérations prouve quel défaut chaque action a corrigé au lieu d'attribuer chaque nettoyage à une vague conversion à partir du texte Windows.

Exemple concret : nettoyer une exportation délibérément doublée et vérifier le nombre de lignes

Le nettoyage de fin de ligne ne répare pas le retour à la ligne, lorsqu'une phrase logique a été délibérément interrompue sur une largeur de colonne. Supprimer chaque nouvelle ligne de ce matériel rejoindrait également de vrais paragraphes et éléments de liste. Décidez si la limite représente un enregistrement, un paragraphe ou un habillage visuel avant d'appliquer une opération de ligne sur l'ensemble du bloc.

Il ne diagnostique pas non plus le codage des caractères. Une marque d'ordre d'octet UTF-8, des diamants de remplacement, un mojibake et des échecs de décodage concernent la manière dont les octets deviennent des caractères, et non la question de savoir si CR ou LF sépare ces caractères en lignes. Conservez le fichier original et identifiez son encodage avec un outil approprié prenant en charge les fichiers avant de traiter les symboles visibles étranges comme des fins de ligne.

Ce qu'il faut retenir : les fins de ligne sont un historique que vous pouvez voir ; les outils de ligne et le compteur de Text Toolkit vous permettent de corriger les symptômes en quelques secondes

CR, LF et CRLF sont des contrôles historiques avec des conséquences de compatibilité actuelles. Le modèle mental le plus sûr est une frontière logique avec plusieurs représentations physiques. Comptez les enregistrements, inspectez la convention source et identifiez l'étape qui a introduit des lignes vides ou conservé des caractères de contrôle avant de supprimer quoi que ce soit.

Pour le matériel collé, ouvrez la boîte à outils de texte à `/tools/text/`, notez le nombre de lignes initial, appliquez Supprimer les lignes vides uniquement lorsque les lignes vides sont véritablement indésirables et utilisez les lignes de coupe uniquement pour les espaces environnants. Revérifiez ensuite le décompte et les enregistrements d’échantillons. Ce bref audit transforme un problème de formatage invisible en une transformation de texte contrôlée et réversible.