Différence entre les types de coupure de ligne CR LF, LF et CR?

760

Je voudrais connaître la différence (avec des exemples si possible) entre les types de saut de ligne CR LF (Windows), LF (Unix) et CR (Macintosh).

eozzy
la source
9
Très similaire, mais pas un double exact . \nest généralement représenté par un saut de ligne, mais ce n'est pas nécessairement un saut de ligne.
Adrian McCarthy
92
CR et LF sont des caractères de contrôle ASCII et Unicode tandis que \ret \nsont des abstractions utilisées dans certains langages de programmation. La fermeture de cette question passe sous silence les différences fondamentales entre les questions et perpétue la désinformation.
Adrian McCarthy
5
@AdrianMcCarthy C'est un problème avec la façon dont les votes serrés agissent en quelque sorte comme des réponses; une réponse affirmant que les deux étaient les mêmes pourrait être déclassée puis grisée comme très, très mauvaise, mais il ne faut que 4 votes d'accord (comparables aux votes positifs) pour que la clôture soit très mauvaise, sans aucun moyen de contrer le vote jusqu'à après c'est arrivé.
Jon Hanna
Cette formulation de la question est certes meilleure, mais c'est toujours à toutes fins pratiques la même question.
Jukka K. Korpela
6
@ JukkaK.Korpela: Non, ce n'est vraiment pas le cas. \nne signifie pas la même chose dans tous les langages de programmation.
Adrian McCarthy

Réponses:

349

Il s'agit vraiment de savoir quels octets sont stockés dans un fichier. CRest un bytecode pour le retour chariot (de l'époque des machines à écrire) et de LFmême pour le saut de ligne. Il fait simplement référence aux octets placés comme marqueurs de fin de ligne.

Beaucoup plus d'informations, comme toujours, sur wikipedia .

Peter
la source
53
Je pense qu'il est également utile de mentionner qu'il CRs'agit du caractère d'échappement \ret LFdu caractère d'échappement \n. En outre, Wikipedia: Newline .
Robert Vunabandi du
1
En termes simples, CR and LFc'est juste la fin de la ligne et la nouvelle ligne selon ce lien , est-ce correct?
shaijut
@shaijut CR signifie Carriage Return. C'est ce qui a rendu la voiture sur les machines à écrire. Donc, en grande partie correct.
AliFurkan
764

CR et LF sont des caractères de contrôle, respectivement codés 0x0D(13 décimales) et 0x0A(10 décimales).

Ils sont utilisés pour marquer un saut de ligne dans un fichier texte. Comme vous l'avez indiqué, Windows utilise deux caractères la séquence CR LF; Unix utilise uniquement LF et l'ancien MacOS (MacIntosh pré-OSX) utilisait CR.

Une perspective historique apocryphe:

Comme indiqué par Peter , CR = Carriage Return et LF = Line Feed , deux expressions ont leurs racines dans les anciennes machines à écrire / ATS. LF a déplacé le papier vers le haut (mais a gardé la position horizontale identique) et CR a ramené le "chariot" afin que le caractère tapé suivant soit à la position la plus à gauche sur le papier (mais sur la même ligne). CR + LF faisait les deux, c'est-à-dire se préparait à taper une nouvelle ligne. Au fil du temps, la sémantique physique des codes n'était pas applicable, et comme la mémoire et l'espace sur disquette étaient rares, certains concepteurs de systèmes d'exploitation ont décidé de n'utiliser qu'un seul des caractères, ils ne communiquaient tout simplement pas très bien entre eux; -)

La plupart des éditeurs de texte modernes et des applications orientées texte offrent des options / paramètres, etc. qui permettent la détection automatique de la convention de fin de ligne du fichier et de l'afficher en conséquence.

mjv
la source
11
En fait, Windows est le seul système d'exploitation qui utilise correctement ces caractères, le retour chariot, suivi d'un saut de ligne.
Rolf
4
Serait-il exact alors de dire qu'un fichier texte créé sur Windows est le plus compatible des trois, c'est-à-dire le plus susceptible de s'afficher sur les trois sous-ensembles de système d'exploitation?
Prometheus
3
@Hashim, il pourrait s'afficher correctement, mais essayer d'exécuter un script shell textuel avec des retours chariot entraînera généralement une erreur
Omer
En termes simples, CR and LFc'est juste la fin de la ligne et la nouvelle ligne selon ce lien , est-ce correct?
shaijut
J'ai constaté que certains fichiers de style Windows ( CR+LF) peuvent s'afficher avec des doubles retours à la ligne sur d'autres systèmes. Vraisemblablement, l'éditeur qui affiche le texte prend en charge à la fois le retour chariot et le saut de ligne en tant que délimiteurs de nouvelle ligne et, en tant que tel, peut créer 2 lignes là où 1 était prévu. Donc, même s'il est CR+LFpeut-être le plus compatible, je ne pense pas que ce soit sans problème.
Magnus Bull
459

Voici un bon résumé que j'ai trouvé:

Le caractère Retour chariot (CR) ( 0x0D, \r) déplace le curseur au début de la ligne sans passer à la ligne suivante. Ce caractère est utilisé comme nouveau caractère de ligne dans les systèmes d'exploitation Commodore et Early Macintosh (OS-9 et versions antérieures).

Le caractère de saut de ligne (LF) ( 0x0A, \n) déplace le curseur vers le bas sur la ligne suivante sans revenir au début de la ligne. Ce caractère est utilisé comme nouveau caractère de ligne dans les systèmes basés sur UNIX (Linux, Mac OSX, etc.)

La séquence de fin de ligne (EOL) ( 0x0D 0x0A, \r\n) est en fait deux caractères ASCII, une combinaison des caractères CR et LF. Il déplace le curseur vers le bas jusqu'à la ligne suivante et au début de cette ligne. Ce caractère est utilisé comme un nouveau caractère de ligne dans la plupart des autres systèmes d'exploitation non Unix, y compris Microsoft Windows, Symbian OS et autres.

La source

Taylor Leese
la source
1
Le caractère "tabulation verticale" déplace le curseur vers le bas et conserve la position dans la ligne, pas le caractère LF. Le LF est EOL.
12431234123412341234123
2
@TaylorLeese Est-ce que / r / n et / n / r sont identiques?
Vicrobot
175

Puisqu'il n'y a pas de réponse le disant simplement, résumée succinctement:

Retour chariot (MAC pré-OSX)

  • CR
  • \ r
  • Code ASCII 13

Saut de ligne (Linux, MAC OSX)

  • LF
  • \ n
  • Code ASCII 10

Retour chariot et saut de ligne (Windows)

  • CRLF
  • \ r \ n
  • Code ASCII 13 puis code ASCII 10

Si vous voyez du code ASCII dans un format étrange, ce sont simplement les nombres 13 et 10 dans un radix / base différent, généralement la base 8 (octal) ou la base 16 (hexadécimal).

http://www.bluesock.org/~willg/dev/ascii.html

ahnbizcad
la source
46

Jeff Atwood a récemment publié un blog à ce sujet: The Great Newline Schism

Voici l'essence de Wikipedia :

La séquence CR + LF était couramment utilisée sur de nombreux premiers systèmes informatiques qui avaient adopté des machines de téléscripteur, généralement un ASR33, comme périphérique de console, car cette séquence était nécessaire pour positionner ces imprimantes au début d'une nouvelle ligne. Sur ces systèmes, le texte était souvent composé de manière routinière pour être compatible avec ces imprimantes, car le concept de pilotes de périphériques masquant ces détails matériels à l'application n'était pas encore bien développé; les applications devaient parler directement à la machine de téléscripteur et suivre ses conventions.La séparation des deux fonctions dissimulait le fait que la tête d'impression ne pouvait pas revenir de l'extrême droite au début de la ligne suivante en un caractère. C'est pourquoi la séquence a toujours été envoyée avec le CR en premier. En fait, il était souvent nécessaire d'envoyer des caractères supplémentaires (CR ou NUL étrangers, qui sont ignorés) pour donner à la tête d'impression le temps de se déplacer vers la marge gauche. Même après le remplacement des télétypes par des terminaux informatiques avec des débits en bauds plus élevés, de nombreux systèmes d'exploitation prenaient toujours en charge l'envoi automatique de ces caractères de remplissage, pour une compatibilité avec les terminaux moins chers qui nécessitaient plusieurs temps de caractères pour faire défiler l'affichage.

Manu
la source
5
+1 C'est par cette simple compréhension que je me souviens toujours dans quel ordre vient la combinaison. Aujourd'hui encore, nous pouvons voir cette logique mécanique dans n'importe quelle imprimante à jet d'encre (j'aime comprendre car je déteste apprendre). Mes autres trucs de mémoire sont: "mac? Return to sender" et "NewLineFeed" (pour se rappeler que NL === LF et pour se souvenir du \ n, car CR a déjà le R dans son abréviation)
GitaarLAB
3
"Je suis douteux ... deux codes de contrôle étaient nécessaires pour le chronométrage". Ce n'est pas ce que ça dit. Il indique que les CR et NUL supplémentaires sont là pour lui donner le temps de revenir, pas le CR LF d'origine.
Julien Rousseau
11
@Adrian Voulez-vous profiter d'une expérience personnelle? 1) Dans mes anciens jours de téléscripteur, l'imprimante que nous utilisions exigeait <CR><CR><LF>- alors bien sûr, j'ai expérimenté avec une seule <CR>. J'ai envoyé <CR><LF>Aaprès une longue ligne, et vous pouviez entendre l' Aimpression avant le retour complet du chariot.
John Burger
11
@Adrian 2) N'oubliez pas que c'était à l'ère électromécanique, où chaque personnage remplissait exactement une fonction. Nous avons souvent souligné un mot en imprimant la ligne, puis en envoyant <CR><CR>et en tapant le nombre correct d'espaces, puis en réimprimant le même mot: une forme primitive de gras.
John Burger
3
@Adrian 3) Et enfin, cela utilisait Baudot (ou le code Murray), pas ASCII. Cinq bits de données, entre un bit de démarrage et un bit d'arrêt et demi. Comment pouvez-vous en avoir un peu? En attendant un demi-temps avant de commencer à envoyer le caractère suivant, pour donner à la tête d'impression le temps de revenir au centre.
John Burger
16

CR - code ASCII 13

LF - code ASCII 10.

Théoriquement, CR ramène le curseur à la première position (à gauche). LF alimente une ligne en déplaçant le curseur d'une ligne vers le bas. C'est ainsi que vous contrôliez autrefois les imprimantes et les moniteurs en mode texte. Ces caractères sont généralement utilisés pour marquer la fin des lignes dans les fichiers texte. Différents systèmes d'exploitation ont utilisé différentes conventions. Comme vous l'avez souligné, Windows utilise la combinaison CR / LF tandis que les Mac pré-OSX utilisent uniquement CR et ainsi de suite.

DmitryK
la source
7

Les systèmes basés sur ASCII ou sur un jeu de caractères compatible utilisent individuellement LF (saut de ligne, 0x0A, 10 en décimal) ou CR (retour chariot, 0x0D, 13 en décimal), ou CR suivi de LF (CR + LF, 0x0D 0x0A); Ces caractères sont basés sur les commandes de l'imprimante: le saut de ligne indique qu'une ligne de papier doit sortir de l'imprimante et un retour chariot indique que le chariot de l'imprimante doit revenir au début de la ligne en cours.

Voici les détails .

pierrotlefou
la source
5

Le triste état des «séparateurs d'enregistrements» ou des «terminateurs de ligne» est un héritage des âges sombres de l'informatique.

Maintenant, nous tenons pour acquis que tout ce que nous voulons représenter est en quelque sorte des données structurées et conformes à diverses abstractions qui définissent les lignes, les fichiers, les protocoles, les messages, le balisage, peu importe.

Mais il était une fois ce n'était pas tout à fait vrai. Applications caractères de contrôle intégrés et traitement spécifique à l'appareil. Les systèmes cérébraux qui nécessitaient à la fois CR et LF n'avaient tout simplement aucune abstraction pour les séparateurs d'enregistrement ou les terminateurs de ligne. Le CR était nécessaire pour que le télétype ou l'affichage vidéo revienne à la première colonne et le LF (aujourd'hui, NL, même code) était nécessaire pour qu'il passe à la ligne suivante. Je suppose que l'idée de faire autre chose que de vider les données brutes sur l'appareil était trop complexe.

Unix et Mac ont en fait spécifié une abstraction pour la fin de ligne, imaginez cela. Malheureusement, ils en ont spécifié différents. (Unix, ahem, est venu en premier.) Et naturellement, ils ont utilisé un code de contrôle qui était déjà "proche" de SOP

Étant donné que presque tous nos logiciels d'exploitation sont aujourd'hui des descendants d'Unix, Mac ou MS fonctionnant SW, nous sommes coincés avec la confusion de fin de ligne.

DigitalRoss
la source
1

NL dérivé de EBCDIC NL = x'15 'qui serait logiquement comparable à CRLF x'odoa ascii ... cela devient évident lorsque l'on déplace physiquement les données des unités centrales vers les moyennes fréquences. Familièrement (comme seules les personnes obscures utilisent ebcdic) NL a été assimilé à CR ou LF ou CRLF

David
la source