web-dev-qa-db-fra.com

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

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).

636
3zzy

Il s’agit vraiment de savoir quels octets sont stockés dans un fichier. CR est un bytecode pour le retour chariot (à partir du temps des machines à écrire) et LF de manière similaire, pour le saut de ligne. Il fait simplement référence aux octets placés en tant que marqueurs de fin de ligne.

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

295
Peter

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 n’utilise que LF et l’ancien MacOS (pré-OSX Macintosh) utilisait le CR.

Une perspective historique apocryphe:

comme indiqué par Peter , CR = retour chariot et LF = Line Feed , deux expressions ont leurs racines dans les anciennes machines à écrire/TTY. LF a déplacé le papier vers le haut (tout en maintenant la position horizontale identique) et CR a ramené le "chariot" de sorte que le prochain caractère saisi se trouve à l'extrême gauche du papier (mais sur la même ligne). CR + LF était en train de faire les deux, c’est-à-dire de préparer une nouvelle ligne. À mesure que le temps passait, la sémantique physique des codes ne s'appliquait plus et, la mémoire et l'espace disque étant trop importants, 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; -)

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

660
mjv

C'est un bon résumé que j'ai trouvé:

Le caractère de 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 caractère de nouvelle ligne dans les systèmes d'exploitation Commodore et Early Macintosh (OS-9 et les versions antérieures).

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

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

Source

423
Taylor Leese

Comme il n'y a pas de réponse à cela, résumons succinctement ceci:

Retour chariot (MAC pré-OSX)

  • CR
  • \ r
  • Code ASCII 13

Line Feed (Linux, MAC OSX)

  • LF
  • \ n
  • Code ASCII 10

Retour chariot et saut de ligne (Windows)

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

Si vous voyez le code ASCII dans un format étrange, il s’agit simplement des chiffres 13 et 10 dans une base/base différente, généralement la base 8 (octale) ou la base 16 (hexadécimale).

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

151
ahnbizcad

Jeff Atwood a récemment publié un article sur ce blog: The Great Newline Schism

Voici l'essence de Wikipedia :

La séquence CR + LF était couramment utilisée sur de nombreux systèmes informatiques anciens qui avaient adopté des télétypes, généralement un ASR33, en tant que périphérique 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érique masquant de tels détails matériels de l'application n'était pas encore bien développé; les applications devaient communiquer directement avec le télécopieur et suivre ses conventions. La séparation des deux fonctions masquait le fait que la tête d'impression ne pouvait pas revenir de l'extrême droite au début de la ligne suivante dans un délai d'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 superflus, qui sont ignorés) pour donner le temps à la tête d’impression de se déplacer vers la marge gauche même après le remplacement des télétypes par un ordinateur. terminaux avec des débits plus élevés, de nombreux systèmes d’exploitation acceptaient toujours l’envoi automatique de ces caractères de remplissage, pour assurer la compatibilité avec des terminaux moins chers nécessitant plusieurs temps de caractères pour faire défiler l’affichage.

43
Manu

CR - ASCII code 13

LF - ASCII code 10.

Théoriquement, CR ramène le curseur sur 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 jadis 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 utilisaient différentes conventions. Comme vous l'avez fait remarquer, Windows utilise la combinaison CR/LF alors que les Mac pré-OSX n'utilisent que CR et ainsi de suite.

16
DmitryK

Les systèmes basés sur ASCII ou un jeu de caractères compatible utilisent soit LF (saut de ligne, 0x0A, 10 en décimal), soit CR (retour à la ligne, 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 le détails .

7
pierrotlefou

Le triste état de "séparateurs d’enregistrements" ou de "terminateurs de ligne" est un héritage des temps sombres de l’informatique.

Maintenant, nous prenons pour acquis que tout ce que nous voulons représenter est en quelque sorte des données structurées et se conforme à diverses abstractions qui définissent des lignes, des fichiers, des protocoles, des messages, des balises, etc.

Mais il était une fois ce n'était pas tout à fait vrai. Caractères de contrôle intégrés aux applications et traitement spécifique à l'appareil. Les systèmes morts cérébraux nécessitant à la fois CR et LF n'avaient tout simplement pas d'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, même pays, même code) était nécessaire pour qu'il passe à la ligne suivante. J'imagine que l'idée de faire autre chose que de transférer les données brutes sur le périphérique était trop complexe.

Unix et Mac ont en fait spécifié un abstraction pour la fin de ligne, imaginez cela. Malheureusement, ils 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 S.O.P.

Étant donné que la quasi-totalité de nos logiciels d’exploitation sont aujourd’hui des descendants de logiciels d’exploitation Unix, Mac ou MS, nous sommes pris au dépourvu.

5
DigitalRoss

NL dérivé de EBCDIC NL = x'15 'qui serait logiquement comparable au CRLF x'odoa ascii ... ceci devient évident lorsque les données sont physiquement déplacées des ordinateurs centraux aux moyennes. Coloquialement (seuls les arcaniques utilisent ebcdic), NL a été assimilé à CR ou LF ou CRLF

1
david