Warum verwendet Windows CR LF?


85

Ich verstehe den Unterschied zwischen den beiden, so dass es nicht nötig ist, darauf einzugehen, aber ich frage mich nur, was die Gründe dafür sind, warum Windows sowohl CR als auch LF verwendet, um einen Zeilenumbruch anzuzeigen. Es scheint, dass die Linux-Methode (nur mit LF) viel sinnvoller ist, Platz spart und einfacher zu analysieren ist.




Hier ist Wikipedia zur Geschichte der Newline: en.wikipedia.org/wiki/Newline#History
Szocske

Es kann erwähnenswert sein, dass CRLF unter Windows meist nur eine Konvention / Standardeinstellung ist. Die meisten Programme unterstützen entweder (obwohl Sie möglicherweise mit den Einstellungen herumspielen müssen). Ich persönlich benutze CRLF fast nie und entscheide mich stattdessen für den LF im UNIX-Stil. Nur eine Handvoll Programme haben noch Probleme mit Dateien, die nur LF verwenden.
Kevin

CR + LF ist der richtige Weg, dies zu tun (es ist der Standard ). Die Frage ist also nicht, warum Windows es richtig macht, sondern warum Mac und Unix / Linux es falsch machen. Das Vermächtnis von Standalone LF ist Faulheit und eine Abkürzung. Ich habe immer CR + LF, bis auf bestimmte Linux-Dinge, die CR + LF anstarren, also wechsle ich dafür in den LF-Modus. IMO, eine Fehlinterpretation von CR + LF ist viel schlimmer als eine Fehlinterpretation eines eigenständigen LF.
InterLinked

Antworten:


96

Historisch bei der Verwendung Nadeldrucker Die Teletypen CR würden den Wagen an die erste Position der Linie zurückbringen, während LF zur nächsten Linie führen würde. Durch die Verwendung von CR + LF in der Datei selbst konnte eine Datei ohne Druckertreiber direkt an den Drucker gesendet werden.

Vielen Dank an @zaph, der darauf hinwies, dass es sich um Teletypen und nicht um Nadeldrucker handelte


46
Sehr häufiger Ärger für einen sehr geringen Nutzen.
Dávid Horváth

7
@Anders Eigentlich waren es Teletypen, die den Grund darstellten. CR schob den Druckkopf nach links zurück und LF schob das Papier vor. Teletypen gingen Nadeldruckern voraus.
Zaph

5
@zaph Deshalb liebe ich Stack Overflow. 2 Jahre später bekomme ich eine Korrektur und habe etwas Neues gelernt.
Anders Abel

30

@sshannin hat eine URL aus Raymond Chens Blog gepostet, aber es funktioniert nicht mehr. Das Blog hat seine interne Software geändert, sodass sich die URLs geändert haben.

Nachdem ich die alten Beiträge im neuen Blog durchgeblättert habe, habe ich sie hier gefunden .

Zitat aus dem Blog:

Warum ist der Leitungsterminator CR + LF?

Dieses Protokoll stammt aus der Zeit der Fernschreiber. CR steht für "Wagenrücklauf" - das CR-Steuerzeichen brachte den Druckkopf ("Wagen") in Spalte 0 zurück, ohne das Papier vorzuschieben. LF steht für "Zeilenvorschub" - das LF-Steuerzeichen hat das Papier um eine Zeile vorgerückt, ohne den Druckkopf zu bewegen. Wenn Sie also den Druckkopf auf Spalte Null zurücksetzen möchten (bereit, die nächste Zeile zu drucken) und das Papier vorschieben möchten (damit es auf frischem Papier gedruckt wird), benötigen Sie sowohl CR als auch LF.

Wenn Sie zu den verschiedenen Internetprotokolldokumenten wie RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) oder RFC 2616 (HTTP) gehen, werden Sie feststellen, dass alle CR + LF als angeben Zeilenabschlusssequenz. Die eigentliche Frage lautet also nicht: "Warum verwenden CP / M, MS-DOS und Win32 CR + LF als Leitungsterminator?" sondern "Warum haben andere Leute beschlossen, sich von diesen Standarddokumenten zu unterscheiden und einen anderen Leitungsabschluss zu verwenden?"

Unix übernahm einfaches LF als Leitungsabschlusssequenz. Wenn Sie sich die stty-Optionen ansehen, werden Sie feststellen, dass die Option onlcr angibt, ob ein LF in CR + LF geändert werden soll. Wenn Sie diese Einstellung falsch verstehen, erhalten Sie Treppenstext, wo

each
    line
        begins 

wo die vorherige Zeile aufgehört hat. Selbst Unix erfordert im Raw-Modus CR + LF, um Zeilen zu beenden. Die implizite CR vor LF ist eine Unix-Erfindung, wahrscheinlich als Wirtschaftlichkeit, da sie ein Byte pro Zeile spart.

Die Unix-Abstammung der C-Sprache übertrug diese Konvention in den C-Sprachstandard, der nur "\ n" (das LF codiert) zum Beenden von Zeilen benötigt, was die Laufzeitbibliotheken belastet, Rohdaten in logische Zeilen umzuwandeln.

Die C-Sprache führte auch den Begriff "Newline" ein, um das Konzept des "generischen Zeilenabschlusses" auszudrücken. Mir wurde gesagt, dass das ASCII-Komitee den Namen des Zeichens 0x0A um 1996 in "newline" geändert hat, sodass die Verwirrung noch höher ist.

Hier ist eine weitere Diskussion des Themas aus einer Unix-Perspektive

Ich habe diesen zweiten Link in einen Schnappschuss in The Wayback Machine geändert, da die eigentliche Seite nicht mehr verfügbar ist.

Ich hoffe das beantwortet deine Frage.


Da Sie die Frage nicht wirklich beantworten, sondern nur einen veralteten Link in einem Kommentar korrigieren , sollte dies wirklich ein Kommentar sein. Trotzdem danke für den richtigen Link. Bitte fügen Sie es als Kommentar hinzu, diese Antwort kann gelöscht werden.
Tom Brunberg

1
OK, ich habe hier den Text aus dem Blog hinzugefügt. Wenn der Link also wieder schlecht wird, ist der Text hier immer noch verfügbar. Ich denke, dies sollte als Antwort und nicht nur als Kommentar aufbewahrt werden, da diese Informationen tatsächlich die ursprünglich gestellte Frage beantworten.
OMA

7
Ich hasse es wirklich, wie Microsoft ihre Links regelmäßig veraltet.
Mark Ransom

1
Diese Antwort ist detaillierter als eine Ausnahme und beantwortet nicht nur die gestellte Frage, sondern auch den vermuteten Grund für die Frage. IMHO ist es besser.
Alexei Martianov

18

Es kommt von den Fernschreibern (und Schreibmaschinen) aus früheren Tagen.

Früher war es so, dass Sie, wenn Sie mit dem Schreiben einer Zeile fertig waren, den Wagen der Schreibmaschine (der das Papier hielt und beim Tippen nach links rutschte) zurück zum Zeilenanfang (CR) bewegen mussten. Sie mussten das Papier dann eine Zeile nach unten (LF) bewegen, um zur nächsten Zeile zu gelangen.

Es gibt Fälle, in denen Sie bei der Rückgabe des Wagens möglicherweise keinen Zeilenvorschub wünschen, z. B. wenn Sie einen Charakter mit einem Bindestrich durchstreichen würden (Sie würden ihn einfach überschreiben).

Aber im Grunde läuft es auf Konventionen hinaus. DOS verwendete die vollständige CR / LF-Konvention und UNIX verkürzte sie ein wenig. Jetzt stecken wir fest!


2

Andere haben die Antwort gegeben, aber ich wollte hinzufügen ... Ich denke, Sie sind zu jung, um eine Schreibmaschine benutzt zu haben? ;) Der Wagen ist eine Trommel. Wenn Sie es horizontal nach rechts bewegen, wird der Kopf des stationären Typs wieder an den linken Rand der Seite gebracht. Durch Drehen des Wagens mit Finger und Daumen wird die Seite um eine Zeile vorgerückt.


2
Schreibmaschine? Ich glaube, ich habe eines davon einmal in einem Museum gesehen :)
Kyle

@ Kyle Ich musste lachen und das hat meinen Tag aufgehellt :)
Likejudo

1

Aus Wikipedia :

Die Sequenz CR + LF wurde häufig auf vielen frühen Computersystemen verwendet, die Fernschreibmaschinen, typischerweise einen ASR33, als Konsolengerät verwendet hatten, da diese Sequenz erforderlich war, um diese Drucker am Anfang einer neuen Zeile zu positionieren.


1

Ich habe mehr als ein Konto gesehen, bei dem der Grund für das Senden von zwei Zeichen (und manchmal mehr) anstelle von einem darin bestand, die Datenübertragungsrate besser an die physische Druckrate anzupassen ( dies ist lange her ). Das Bewegen des Druckkopfs dauerte länger als das Drucken eines einzelnen Zeichens, und das Senden zusätzlicher Zeichen verhinderte, dass die Datenübertragung dem Druckgerät vorausging. Der Grund, warum wir in Windows mehrere Zeichen für das Zeilenende haben, ist im Grunde der gleiche wie der Grund, warum wir QWERTZ-Tastaturen haben - es sollte die Dinge verlangsamen .

Offensichtlich beruht der Grund, warum diese Praxis in Windows bis heute andauert, auf einer Vorstellung von fortlaufender Abwärtskompatibilität und letztendlich nur auf einfacher Trägheit.

Zu beachten ist jedoch, dass diese Konvention von Windows auf Betriebssystemebene nicht strikt durchgesetzt wird . Jede Windows-Anwendung kann die Konvention ignorieren, je nachdem, mit welchen anderen Anwendungen sie kompatibel sein möchte.

Interessanterweise behauptet der Wikipedia-Artikel über "Newline" , dass Windows 8 möglicherweise eine Änderung der Verwendung von nur LF einführt. Der Artikel besagt auch, dass Mac OS X einen Übergang von LF + CR zu nur LF eingeführt hat.


4
"Absicht, die Dinge zu verlangsamen" - Zitat erforderlich.
Elliot Gorokhovsky

4
Eigentlich wird der gesamte erste Absatz - Zitat benötigt.
Elliot Gorokhovsky

2
Hier ist ein eng verwandter Artikel von Jeff Atwood, der auf denselben Wikipedia-Inhalt verweist: The Great Newline Schism . Dort gibt es auch viele intelligente Benutzerkommentare - einschließlich einiger Belege dafür, dass dies kein Problem auf Betriebssystemebene ist und dass die meisten Windows-Apps mit Nur-LF-Textdateien einwandfrei funktionieren. Es gibt auch den lustigen Kommentar: "Windows 10 verwendet CR / LF, um die Kompatibilität mit dem Fernschreibgerät Modell 33 von 1963 aufrechtzuerhalten ."
Brent Bradburn

1
@ RenéG Ich brauche kein Zitat, ich war dort und habe es selbst gesehen. Einige frühe Nadeldrucker erforderten sogar ein paar zusätzliche NULs, da der Kopf mit zunehmender Baudrate der Schnittstelle selbst mit zwei Zeichen nicht mithalten konnte. Dieses Problem verschwand, als Pufferung und Flusskontrolle ins Bild kamen, aber die frühen Drucker hatten das nicht. Als die Drucker schließlich nur noch ausgegeben wurden, gingen sie zu einer parallelen Schnittstelle, in die Handshake integriert war.
Mark Ransom

1
„Entgegen der landläufigen Meinung wurde das QWERTZ-Layout nicht entwickelt, um die Schreibkraft zu verlangsamen ,…“ - Eigenschaften | QWERTY - Wikipedia
Jason Sparc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.