Ja ja, ich bin mir dessen bewusst , dass '\n'
eine neue Zeile in UNIX schreibt , während für Windows gibt es die zwei Zeichenfolge ist: '\r\n'
. Theoretisch ist das alles sehr schön, aber meine Frage ist warum ? Warum ist das Wagenrücklaufzeichen in Windows extra? Wenn UNIX das kann, \n
warum braucht Windows dafür zwei Zeichen?
Ich lese David Beazleys Python-Buch und er sagt:
Wenn Sie zum Beispiel unter Windows das Zeichen '\ n' schreiben, wird die zweistellige Folge '\ r \ n' ausgegeben (und beim Zurücklesen der Datei wird '\ r \ n' zurück in ein einzelnes '\ n' übersetzt). Charakter).
Warum der Mehraufwand?
Ich werde ehrlich sein. Ich kenne den Unterschied seit langer Zeit, habe mich aber nie darum gekümmert, WARUM zu fragen. Ich hoffe das wird heute beantwortet.
Vielen Dank für Ihre Zeit.
quelle
\r\n
. Es wird auch von den meisten textbasierten Internetprotokollen (z. B. SMTP, HTTP usw.) verwendet, und zwar weitgehend aus demselben Grund wie Windows (dh aus dem Verlauf).System.out.printf()
oderString.format()
) verwenden, stellen Sie außerdem sicher, dass Sie diese aus%n
Gründen der Betriebssystemkompatibilität als CRLF verwenden.\n
ist veraltet.\n\r
mehrmals gesehen. (Ich denke, es war etwas von NetWare.)Antworten:
Rückwärtskompatibilität.
Windows ist abwärtskompatibel mit MS-DOS (aggressiv sogar) und MS-DOS verwendete die CR-LF-Konvention, da MS-DOS mit CP / M-80 (etwas zufällig) kompatibel war, das die CR-LF-Konvention aus diesem Grund verwendete war, wie Sie einen Drucker fuhren (weil Drucker ursprünglich computergesteuerte Schreibmaschinen waren).
Drucker haben einen separaten Befehl, um das Papier um eine Zeile nach oben in eine neue Zeile zu verschieben, und einen separaten Befehl, um den Wagen (in dem das Papier eingelegt war) zurück an den linken Rand zu bewegen.
Deshalb. Und ja, es ist ärgerlich, aber es ist Teil des Pakets, das es MS-DOS ermöglichte, CP / M und Windows 95 für alle anderen GUIs außer DOS zu gewinnen und Windows XP für die Übernahme von Windows 98.
(Hinweis: Moderne Laserdrucker verfügen immer noch über diese Befehle, da sie auch mit früheren Druckern abwärtskompatibel sind. Dies ist insbesondere bei HP gut möglich.)
Für diejenigen, die mit Schreibmaschinen nicht vertraut sind, ist hier ein Video zu sehen, wie das Tippen durchgeführt wurde: http://www.youtube.com/watch?v=LJvGiU_UyEQ . Beachten Sie, dass das Papier zuerst nach oben bewegt wird und dann der Wagen zurückgebracht wird, auch wenn dies in einer einfachen Bewegung geschieht. Das Ding teilte der Schreibkraft mit, dass das Ende nahe sei, und bereitete sich darauf vor.
quelle
Soweit ich weiß, geht dies auf die Zeit der Schreibmaschinen zurück.
\r
ist ein Wagenrücklauf, der das ist, was sich bewegt, wenn Sie auf der Seite nach links zurückschreiben (oder nach rechts, wenn das Ihre Kultur ist)\n
ist eine neue Zeile, die das Papier um eine Zeile nach oben verschiebt.Wenn Sie nur eine davon mit einer Schreibmaschine ausführen, sind Sie an der falschen Stelle, um mit dem Schreiben einer neuen Textzeile zu beginnen.
Als Computer entstanden, haben vermutlich einige Leute das alte Modell beibehalten, aber andere haben erkannt, dass es nicht notwendig ist, und haben eine vollständige neue Zeile als ein Zeichen gekapselt.
quelle
Ich weiß nicht, ob dies allgemein bekannt ist, aber es sollte beachtet werden, dass CR immer noch von modernen Terminalemulatoren verstanden wird:
Es ist praktisch für Fortschrittsanzeigen, z
quelle
In der Vergangenheit bedeutete Zeilenvorschub, dass die Walze - die Walze, auf der Sie tippen - eine Zeile drehte, sodass Text in der nächsten Zeile ... aber in der nächsten Spalte angezeigt wurde.
Carriage Return bedeutete "Rückgabe des Bits, mit dem Sie an den Zeilenanfang tippen".
Windows verwendet CR + LF, weil MS-DOS, CP / M, weil es für serielle Leitungen sinnvoll war.
Unix hat seine Konvention kopiert, weil Multics dies getan hat.
Ich vermute, wenn Sie weit genug zurück graben, werden Sie eine politische Meinungsverschiedenheit zwischen den Umsetzern feststellen!
(Sie haben das Extra-Spaß-Bit weggelassen, bei dem die Mac-Konvention (oder früher) nur die Verwendung von CR zum Trennen von Zeilen war. Und jetzt hat Unicode auch einen eigenen Zeilentrenner, U + 2028!)
quelle
Geschichte des Newline-Charakters (Wikipedia):
quelle
Was ist mit der Frage "Warum kann Unix
\n
und nicht Windows?" Es ist so eine seltsame Frage.\n
und sind in\r\n
Ordnung. Sie geben auch aus,\r\n
damit jeder glücklich ist. Ein Programm "tut" nicht einfach eines\n
oder\r\n
- es akzeptiert das eine, das andere oder beide und gibt das eine, das andere oder beide aus.\n
anstelle des richtigen tat\r\n
.\n
vollständig ausgeben, wenn sie wissen, dass es einige Protokolle und Programme gibt, die sie nicht mögen.quelle
Der Grund, warum die Konventionen für die verschiedenen Systeme gelten (\ n auf Unix-Systemen, \ r \ n unter Windows usw.), besteht darin, dass Sie eine Konvention nicht ändern können, ohne eine Reihe von Dateien zu beschädigen. Und das ist im Allgemeinen verpönt.
Unix-artige Systeme wurden (sehr früh) unter Verwendung verschiedener Teletypmodelle entwickelt, und irgendwann entschied jemand, dass die Ausrüstung bei einem Zeilenvorschub mit Wagenrücklauf versehen werden sollte.
Windows stammte aus DOS, daher stellt sich für Windows die Frage: Warum hat DOS diese cr / lf-Sequenz verwendet? Ich vermute, es hat etwas mit CP / M zu tun, wo DOS einige seiner Wurzeln hat. Auch hier können bestimmte Modelle des Teletyps eine Rolle gespielt haben.
quelle
\n
, aber vorerst weiterhin verwenden\r\n
? Wenn sie dies ab Windows XP tun würden, könnten sie jetzt anfangen, Dateien mit zu speichern,\n
anstatt mit\r\n
.Hier ist eine Antwort von der besten Quelle - Microsoft. Warum ist der Leitungsabschluss CR + LF?
quelle