Oui, je suis conscient que '\n'
écrit une nouvelle ligne sous UNIX alors que pour Windows , il y a la séquence de deux caractères: '\r\n'
. Tout cela est très bien en théorie, mais ma question est pourquoi ? Pourquoi le caractère de retour chariot est-il extra dans Windows? Si UNIX peut le faire dans \n
pourquoi cela prend-il deux caractères à Windows pour le faire?
Je lis le livre de David Beazley dans Python et il dit:
Par exemple, sous Windows, l'écriture du caractère '\ n' génère en réalité la séquence de deux caractères '\ r \ n' (et lors de la lecture du fichier, '\ r \ n' est traduit en un seul '\ n' personnage).
Pourquoi cet effort supplémentaire?
Je vais être honnête. Je connais la différence depuis longtemps, mais je n'ai jamais pris la peine de demander POURQUOI. J'espère qu'on y répond aujourd'hui.
Merci pour votre temps.
la source
\r\n
. Il est également utilisé par la plupart des protocoles Internet textuels (tels que SMTP, HTTP, etc.) pour la même raison que Windows (historique).System.out.printf()
ouString.format()
), assurez-vous de les utiliser%n
comme CRLF à des fins de compatibilité avec les systèmes d’exploitation.\n
est obsolète.\n\r
plusieurs fois. (Je pense que c'était quelque chose de NetWare.)Réponses:
Rétrocompatibilité.
Windows est rétro-compatible avec MS-DOS (même agressivement) et MS-DOS a utilisé la convention CR-LF car MS-DOS était compatible avec CP / M-80 (un peu par hasard) qui utilisait la convention CR-LF car comment vous conduisiez une imprimante (car les imprimantes étaient à l’origine des machines à écrire contrôlées par ordinateur).
Les imprimantes disposent d’une commande distincte pour déplacer le papier d’une ligne à l’autre, et d’une commande distincte pour ramener le chariot (où le papier a été monté) dans la marge de gauche.
C'est pourquoi. Et, oui, c'est une gêne, mais cela fait partie du contrat qui a permis à MS-DOS de gagner sur CP / M, et Windows 95 de gagner sur toutes les autres interfaces graphiques en plus de DOS, et Windows XP de prendre le relais. à partir de Windows 98.
(Remarque: les imprimantes laser modernes disposent toujours de ces commandes, car elles sont également compatibles avec les précédentes imprimantes - HP le fait bien.)
Pour ceux qui ne connaissent pas les machines à écrire, voici une vidéo montrant comment la frappe a été effectuée: http://www.youtube.com/watch?v=LJvGiU_UyEQ . Notez que le papier est d'abord soulevé, puis que le chariot est renvoyé, même si cela se produit par un simple mouvement. Le ding a informé la dactylographe que la fin était proche, et de s'y préparer.
la source
Autant que je sache, cela remonte à l'époque des machines à écrire.
\r
Est le retour chariot, qui est ce qui se déplace où vous tapez sur la page vers la gauche (ou à droite si c'est votre culture)\n
est une nouvelle ligne qui déplace votre papier d’une ligne vers le haut.Ne faire qu'une seule de ces opérations sur une machine à écrire vous placerait au mauvais endroit pour commencer à écrire une nouvelle ligne de texte.
Lorsque les ordinateurs sont arrivés, certaines personnes ont conservé l'ancien modèle, mais d'autres se sont rendu compte que ce n'était pas nécessaire et ont encapsulé une nouvelle ligne complète en un seul caractère.
la source
Je ne sais pas si cela est de notoriété publique, mais il convient de noter que CR est toujours compris par les émulateurs de terminaux modernes:
C'est pratique pour les indicateurs de progrès, par exemple
la source
Auparavant, le saut de ligne signifiait que la platine - le rouleau sur lequel vous tapez - faisait pivoter une ligne, ce qui faisait apparaître du texte sur la ligne suivante ... mais dans la colonne suivante.
Retour de chariot signifiait "renvoyer le bit avec lequel vous tapez au début de la ligne".
Windows utilise CR + LF parce que MS-DOS l'a fait, parce que CP / M l'a fait, parce que cela avait du sens pour les lignes série.
Unix a copié sa convention \ n comme le faisait Multics.
Je suppose que si vous creusez suffisamment, vous constaterez un désaccord politique entre les développeurs.
(Vous avez laissé de côté le bit amusant supplémentaire, où la convention Mac est (ou était) d'utiliser simplement CR pour séparer les lignes. Et maintenant, Unicode a également son propre séparateur de ligne, U + 2028!)
la source
Histoire du personnage Newline (Wikipedia):
la source
Qu'en est-il des gens qui demandent "Pourquoi Unix peut-
\n
il le faire et pas Windows"? C'est une question si étrange.\n
et\r\n
très bien. Ils ont également produit\r\n
afin que tout le monde soit heureux. Un programme ne fait pas simplement "faire"\n
ou\r\n
- il accepte l’ un, l’autre ou les deux et produit l’ un, l’autre ou les deux.\n
lieu de la bonne\r\n
.\n
savent qu’il existe certains protocoles et programmes qui ne l’aiment pas?la source
La raison pour laquelle les conventions s’appliquent à leurs différents systèmes (\ n sur les systèmes de type Unix, \ r \ n sur Windows, etc.) est qu’une fois que vous avez sélectionné une convention, vous NE POUVEZ PAS la modifier sans détruire les fichiers de personnes. Et c'est généralement mal vu.
Des systèmes de type Unix ont été développés (à l’origine) avec différents modèles de télétype et, à un moment donné, une personne a décidé que l’équipement devait rapporter le poids du retour lorsqu’il effectuait un saut de ligne.
Windows venait de DOS, alors la question qui se pose à Windows est la suivante: pourquoi DOS utilise-t-il cette séquence cr / lf? Je suppose que cela a quelque chose à voir avec CP / M, où DOS a certaines de ses racines. Encore une fois, des modèles spécifiques de télétype peuvent avoir joué un rôle.
la source
\n
, mais continuer à utiliser\r\n
pour le moment? S'ils le faisaient à partir de Windows XP, ils pourraient désormais commencer à enregistrer des fichiers avec\n
au lieu de\r\n
.Voici une réponse de la meilleure source - Microsoft. Pourquoi le terminateur de ligne est-il CR + LF?
la source