870 votes

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

J'aimerais 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).

9 votes

Très similaire, mais pas un exact duplicata. \n est généralement représenté par un saut de ligne, mais ce n'est pas nécessairement un saut de ligne.

107 votes

CR et LF sont des caractères de contrôle ASCII et Unicode tandis que \r et \n sont des abstractions utilisées dans certains langages de programmation. Fermer cette question revient à passer sous silence des différences fondamentales entre les deux questions et perpétue la désinformation.

5 votes

@AdrianMcCarthy C'est un problème avec la façon dont les votes serrés agissent comme des réponses d'une certaine façon ; une réponse affirmant que les deux étaient les mêmes pourrait être déclassée et ensuite grisée comme très, très fausse, mais il suffit de 4 votes d'accord (comparables aux votes positifs) pour qu'un vote serré très faux se produise, sans possibilité de contrer le vote avant qu'il ne se produise.

851voto

mjv Points 38081

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 ( MacIntosh pré-OSX ) utilisait CR.

Une perspective historique apocryphe :

Comme indiqué par Peter , CR = Retour de chariot et LF = Alimentation en ligne Ces deux expressions trouvent leur origine dans les anciennes machines à écrire / TTY. LF déplaçait le papier vers le haut (mais gardait la position horizontale identique) et CR ramenait le "chariot" de sorte que le prochain caractère tapé se trouve à la position la plus à gauche sur le papier (mais sur la même ligne). CR+LF faisait les deux, c'est-à-dire qu'il 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 les disquettes étaient limités, certains concepteurs de systèmes d'exploitation ont décidé de n'utiliser qu'un seul des caractères, car ils ne communiquaient pas très bien entre eux ;-)

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

26 votes

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.

6 votes

Serait-il donc exact de dire qu'un fichier texte créé sous Windows est le plus compatible des trois, c'est-à-dire le plus susceptible de s'afficher sur les trois sous-ensembles d'OS ?

3 votes

@Hashim il pourrait s'afficher correctement mais essayer d'exécuter un shell textuel script avec des retours de chariot résultera généralement en une erreur.

509voto

Taylor Leese Points 18895

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

Le caractère Carriage Return (CR) ( 0x0D , \r ) déplace le curseur au début de la ligne sans avancer à 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 antérieurs).

Le caractère "Line Feed" (LF) ( 0x0A , \n ) permet de déplacer le curseur vers 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 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 à 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, y compris Microsoft Windows, Symbian OS et d'autres.

Source :

1 votes

Le caractère de "tabulation verticale" déplace le curseur vers le bas et maintient la position dans la ligne, pas le caractère LF. Le caractère LF est EOL.

4 votes

@TaylorLeese Est-ce que /r/n et /n/r sont identiques ?

419voto

Peter Points 38320

Il s'agit simplement de savoir quels octets sont stockés dans un fichier. CR est un bytecode pour le retour chariot (du temps des machines à écrire) et LF de même, pour l'alimentation en ligne. Il s'agit simplement des octets qui sont placés comme marqueurs de fin de ligne.

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

92 votes

Je pense qu'il est également utile de mentionner que CR est le caractère d'échappement \r et LF est le caractère d'échappement \n . En outre, Wikipedia:Nouvelle ligne .

1 votes

En termes simples CR and LF est juste la fin de la ligne et la nouvelle ligne selon ceci lien Est-ce correct ?

2 votes

@shaijut CR signifie Carriage Return (retour chariot). C'était ce qui renvoyait le chariot sur les machines à écrire. Donc, presque correct.

51voto

Manu Points 10901

Jeff Atwood a récemment publié un article sur son blog à ce sujet : Le grand schisme de Newline

Voici l'essentiel de Wikipedia :

La séquence CR+LF était utilisée couramment sur les premiers systèmes informatiques qui qui avaient adopté les télétypes, typiquement un ASR33, comme console console, car cette séquence était nécessaire pour positionner ces imprimantes au au début d'une nouvelle ligne. Sur ces systèmes, le texte était souvent composé de manière composé pour être compatible avec ces imprimantes imprimantes, puisque le concept de pilotes de de périphériques cachant de tels détails matériels de l'application n'était pas encore bien développé ; les applications devaient parler directement au téléscripteur et suivre ses conventions. La séparation de ces deux fonctions cachait le fait que 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 d'un caractère. C'est pourquoi la séquence était toujours envoyée avec le CR en premier. En fait, il était souvent nécessaire d'envoyer des caractères supplémentaires (CR CRs ou NULs étrangers, qui sont ignorés) pour pour donner à la tête d'impression le temps de se déplacer vers la marge de gauche. Même après que les télétypes ont été remplacés par des terminaux informatiques avec des vitesses de transmission plus élevées, de nombreux systèmes d'exploitation supportaient encore l'envoi automatique de ces caractères de remplissage, pour compatibilité avec les terminaux bon marché qui nécessitaient l'utilisation de plusieurs caractères pour faire défiler l'affichage.

6 votes

+1 C'est par cette simple compréhension que je me souviens toujours dans quel ordre vient la combinaison. Aujourd'hui encore on peut voir cette logique mécanique dans n'importe quelle inktjet-printer (j'aime comprendre car je déteste apprendre). Mes autres trucs de mémoire sont : "mac ? Retour à l'expéditeur" et "NewLineFeed" (pour me souvenir que NL===LF et pour me souvenir de l'ordre des caractères). \n (puisque CR a déjà le R dans son abréviation).

0 votes

Je doute de l'affirmation selon laquelle la division du processus de passage à la ligne suivante en deux codes de contrôle était nécessaire pour la synchronisation. Je ne doute pas qu'il y ait eu des problèmes de timing, mais la communication série a toujours eu une certaine mise en mémoire tampon et un contrôle de flux. En ce qui concerne le matériel du pilote, je peux imaginer qu'il y avait des problèmes de temps à surmonter qui ont pu être résolus en ajoutant des NULs pour combler le temps de retour de la tête d'impression à la marge, mais j'aimerais voir de meilleures citations avant de croire que c'est la raison pour laquelle CR et LF étaient des opérations distinctes.

3 votes

"J'ai des doutes ... deux codes de contrôle étaient nécessaires pour la synchronisation". Ce n'est pas ce qui est dit. Il est dit que les CRs et NULs supplémentaires sont là pour donner du temps pour qu'il revienne, pas le CR LF original.

17voto

DmitryK Points 3824

CR - Code ASCII 13

LF - code ASCII 10.

Théoriquement, CR renvoie le curseur à la première position (à gauche). LF avance d'une ligne en déplaçant le curseur d'une ligne vers le bas. C'est ainsi qu'autrefois on contrôlait 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. Les différents systèmes d'exploitation utilisent des conventions différentes. Comme vous l'avez souligné, Windows utilise la combinaison CR/LF alors que les Macs pré-OSX n'utilisent que CR et ainsi de suite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X