745 votes

Différence entre \n y \r ?

Quelle est la différence entre \n (nouvelle ligne) et \r (retour chariot) ?

En particulier, y a-t-il pratique les différences entre \n y \r ? Y a-t-il des endroits où l'un devrait être utilisé au lieu de l'autre ?

4 votes

Toutes les réponses sont assez prévisibles, mais je serais intéressé de savoir s'il existe des différences PRATIQUES entre \n y \r. Y a-t-il des endroits où l'un doit être utilisé plutôt que l'autre ?

9 votes

Eh bien, oui, les fichiers texte comportant uniquement LF (newline) ne seront pas considérés comme terminés dans certaines applications Windows, et les fichiers texte terminés par CRLF sembleront comporter des caractères supplémentaires s'ils sont ouverts dans certaines applications Linus.

2 votes

Oui, \r est utilisé par certaines applications de console linux pour faire des animations de lignes tournantes.

975voto

Alex Martelli Points 330805

En termes de code ascii, c'est 3 -- puisqu'ils ont respectivement 10 et 13 ans ;-).

Mais sérieusement, il y en a beaucoup :

  • dans Unix et tous les systèmes similaires à Unix, \n est le code pour la fin de ligne, \r ne signifie rien de spécial
  • par conséquent, en C et dans la plupart des langages qui le copient d'une manière ou d'une autre (même de loin), \n est la séquence d'échappement standard pour la fin de ligne (traduite en/depuis des séquences spécifiques au système d'exploitation si nécessaire).
  • dans les anciens systèmes Mac (pré-OS X), \r était le code pour la fin de ligne à la place
  • sous Windows (et de nombreux anciens systèmes d'exploitation), le code pour la fin de ligne est de 2 caractères, \r\n dans cet ordre
  • comme une conséquence (surprenante;-) (rappelant des systèmes d'exploitation bien plus anciens que Windows), \r\n est la terminaison de ligne standard pour les formats de texte sur Internet.
  • pour les "terminaux" électromécaniques de type télétype, \r commande au chariot de reculer vers la gauche jusqu'à ce qu'il atteigne la butée la plus à gauche (une opération lente), \n commande au rouleau d'enrouler une ligne (une opération beaucoup plus rapide) -- c'est la raison pour laquelle vous avez toujours \r antes de \n pour que le rouleau puisse se déplacer alors que le chariot continue à avancer vers la gauche !-) Wikipedia a un explication plus détaillée .
  • pour les terminaux en mode caractère (émulant typiquement les anciens terminaux d'impression comme ci-dessus), en mode brut, \r y \n agissent de manière similaire (sauf en ce qui concerne le curseur, car il y a des est pas de chariot ni de rouleau;-)

En pratique, dans le contexte moderne de l'écriture dans un fichier texte, vous devriez toujours utiliser \n (le runtime sous-jacent traduira cela si vous êtes sur un OS bizarre, par exemple Windows;-). La seule raison d'utiliser \r c'est si vous écrivez dans un terminal de caractères (ou plus probablement dans une "fenêtre console" qui l'émule) et que vous voulez que la prochaine ligne que vous écrivez écrase la dernière que vous venez d'écrire (parfois utilisé pour des effets bizarres d'"animation ascii", par exemple pour des barres de progression) -- cela devient plutôt obsolète dans un monde d'interfaces graphiques, cependant;-).

13 votes

Pour ajouter à l'historique de cette réponse : lorsque la vitesse de la ligne est passée de 10 caractères par seconde, il fallait plus de 2 caractères pour que la charrette revienne et que des caractères supplémentaires inoffensifs (typiquement NUL, c'est à dire \0 ) ont été ajoutés après le \n pour permettre le temps supplémentaire. Cette opération a été gérée de manière transparente par le système d'exploitation, de sorte que vous n'en trouverez aucune trace dans le code hérité.

12 votes

En quoi Windows est-il un système d'exploitation "bizarre" ?

38 votes

@mailmindlin -- vous demandez "En quoi Windows est-il un système d'exploitation "bizarre" ?". Réponse : de plus de façons que je ne peux facilement en compter (tout en portant des chaussettes, donc les orteils ne sont pas autorisés :-). Tous les autres systèmes d'exploitation survivants sont basés sur Unix... Windows est le seul à ne pas être disponible, Loin de là, à bien des égards. Dans le contexte de cette question spécifique, c'est le seul qui pose DEUX octets ( \n\r ) comme fin de ligne canonique... sans aucune raison valable, si ce n'est les raisons historiques expliquées ailleurs dans le fil de discussion... tous les autres systèmes d'exploitation ont une seule fin de ligne char a5 (99%+ d'entre eux `. \n ').

163voto

tster Points 9948

Historiquement, un \n a été utilisée pour déplacer le chariot vers le bas, tandis que la touche \r a été utilisé pour déplacer le chariot vers le côté gauche de la page.

17 votes

Il ne s'agit peut-être pas d'une réponse très pratique à une question informatique, mais l'anecdote historique obtient tout de même un vote positif de ma part.

1 votes

Imaginez \r comme lorsque vous poussez la partie dactylographique de votre machine à écrire physique vers la gauche, c'est-à-dire vers le retour.

3 votes

\n ne fait pas descendre le chariot, elle fait tourner le rouleau pour faire monter le papier.

56voto

pavium Points 7845

Deux personnages différents.

\n est utilisé comme terminateur de fin de ligne dans les fichiers textes Unix

\r Était historiquement (avant OS X) utilisé comme terminateur de fin de ligne dans les fichiers texte Mac.

\r\n (c'est-à-dire les deux ensemble) sont utilisés pour terminer les lignes dans les fichiers texte de Windows et DOS.

2 votes

Notez qu'il y a/avait des ordinateurs qui utilisaient \n\r comme marqueur de fin de ligne lorsque vous appuyez sur la touche ENTER, comme Acorn et RISC OS.

13 votes

Pour clarifier : \r n'a pas été la fin de ligne sur un Mac depuis longtemps. Avec la sortie de Mac OS X en 2001 (qui est basé sur Unix), \n est maintenant utilisé.

6 votes

Mais il existe encore des applications qui utilisent \r - Par exemple, MS Office 2011 Excel : Enregistrement d'un CSV (avec tous les paramètres par défaut) - enregistrera un fichier codé ISO-8859-1 avec \r -les fins de lignes.

16voto

a432511 Points 596

Deux caractères différents pour des systèmes d'exploitation différents. Cela joue également un rôle dans les données transmises sur TCP/IP ce qui nécessite l'utilisation de \r\n .

\n Unix

\r Mac

\r\n Windows et DOS.

11 votes

Je pense que vous confondez avec les protocoles applicatifs, TCP/IP n'a aucune idée de \n y \r .

7 votes

TCP/IP ne nécessite pas l'utilisation de \r\n. Divers protocoles basés sur Telnet le nécessitent, notamment SMTP, POP3, FTP, HTTP, ...

2voto

YOU Points 44812

\r est le code char 13 et \n est le code de char 10

Utilisation de Windows \r\n Utilisation de linux \n et l'utilisation de mac \r pour autant que je sache.

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