Unterschied zwischen CR LF-, LF- und CR-Zeilenumbrucharten?

758

Ich möchte den Unterschied (wenn möglich mit Beispielen) zwischen CR LF (Windows), LF (Unix) und CR (Macintosh) Zeilenumbruchstypen kennen.

eozzy
quelle
9
Sehr ähnlich, aber kein genaues Duplikat. \nwird normalerweise durch einen Zeilenvorschub dargestellt, ist jedoch nicht unbedingt ein Zeilenvorschub.
Adrian McCarthy
92
CR und LF sind ASCII- und Unicode-Steuerzeichen, während \rund \nsind Abstraktionen, die in bestimmten Programmiersprachen verwendet werden. Das Schließen dieser Frage beschönigt grundlegende Unterschiede zwischen den Fragen und verewigt Fehlinformationen.
Adrian McCarthy
5
@AdrianMcCarthy Es ist ein Problem mit der Art und Weise, wie enge Abstimmungen in gewisser Weise als Antworten dienen. Eine Antwort, die behauptet, die beiden seien gleich, könnte herabgestuft und dann als sehr, sehr falsch ausgegraut werden, aber es sind nur 4 zustimmende Stimmen (vergleichbar mit Gegenstimmen) erforderlich, um einen sehr falschen Abschluss zu erzielen, ohne dass die Abstimmung erst danach kontert werden kann Es ist passiert.
Jon Hanna
Diese Formulierung der Frage ist zwar besser, aber für alle praktischen Zwecke immer noch dieselbe Frage.
Jukka K. Korpela
6
@ JukkaK.Korpela: Nein, das ist es wirklich nicht. \nbedeutet nicht in allen Programmiersprachen dasselbe.
Adrian McCarthy

Antworten:

348

Es geht wirklich nur darum, welche Bytes in einer Datei gespeichert sind. CRist ein Bytecode für den Wagenrücklauf (aus den Tagen der Schreibmaschinen) und in LFähnlicher Weise für den Zeilenvorschub. Es bezieht sich nur auf die Bytes, die als Zeilenende-Marker platziert werden.

Viel mehr Informationen, wie immer, auf Wikipedia .

Peter
quelle
52
Ich denke, es ist auch nützlich zu erwähnen, dass dies CRder Fluchtcharakter \rund LFder Fluchtcharakter ist \n. Außerdem Wikipedia: Newline .
Robert Vunabandi
1
In einfachen Worten CR and LFist nur das Ende der Zeile und die neue Zeile gemäß diesem Link , ist das richtig?
Shaijut
@shaijut CR steht für Carriage Return. Das war es, was den Wagen auf Schreibmaschinen zurückbrachte. Also meistens richtig.
AliFurkan
763

CR und LF sind Steuerzeichen, die jeweils codiert 0x0D(13 Dezimalstellen) bzw. 0x0A(10 Dezimalstellen) sind.

Sie werden verwendet, um einen Zeilenumbruch in einer Textdatei zu markieren. Wie Sie angegeben haben, verwendet Windows die CR LF-Sequenz mit zwei Zeichen. Unix verwendet nur LF und das alte MacOS (Pre-OSX MacIntosh) verwendet CR.

Eine apokryphe historische Perspektive:

Wie von Peter angegeben , CR = Carriage Return und LF = Line Feed , haben zwei Ausdrücke ihre Wurzeln in den alten Schreibmaschinen / TTY. LF bewegte das Papier nach oben (behielt aber die horizontale Position bei) und CR brachte den "Wagen" zurück, so dass sich das nächste eingegebene Zeichen an der Position ganz links auf dem Papier befand (aber in derselben Zeile). CR + LF hat beides getan, dh sich darauf vorbereitet, eine neue Zeile einzugeben. Da die physische Semantik der Codes im Laufe der Zeit nicht anwendbar war und Speicherplatz und Diskettenspeicher knapp waren, entschieden sich einige Betriebssystementwickler, nur eines der Zeichen zu verwenden, sie kommunizierten einfach nicht sehr gut miteinander. -)

Die meisten modernen Texteditoren und textorientierten Anwendungen bieten Optionen / Einstellungen usw., mit denen die Zeilenende-Konvention der Datei automatisch erkannt und entsprechend angezeigt werden kann.

mjv
quelle
11
Daher ist Windows das einzige Betriebssystem, das diese Zeichen ordnungsgemäß verwendet, "Wagenrücklauf", gefolgt von einem Zeilenvorschub.
Rolf
4
Wäre es dann richtig zu sagen, dass eine unter Windows erstellte Textdatei die kompatibelste der drei ist, dh die wahrscheinlichste, die auf allen drei Betriebssystem-Teilmengen angezeigt wird?
Prometheus
3
@ Hashim es könnte richtig angezeigt werden, aber der Versuch, ein Text-Shell-Skript mit Wagenrücklauf auszuführen, führt normalerweise zu einem Fehler
Omer
In einfachen Worten CR and LFist nur das Ende der Zeile und die neue Zeile gemäß diesem Link , ist das richtig?
Shaijut
Ich habe festgestellt, dass einige Windows-Dateien ( CR+LF) auf anderen Systemen mit doppelten Zeilenumbrüchen angezeigt werden können. Vermutlich unterstützt der Editor, der den Text anzeigt, sowohl Wagenrücklauf als auch Zeilenvorschub als Zeilenumbruchbegrenzer und kann daher 2 Zeilen erstellen, in denen 1 beabsichtigt war. Während also CR+LFkönnte das sein am meisten kompatibel, ich glaube nicht , es ohne Problem.
Magnus Bull
459

Dies ist eine gute Zusammenfassung, die ich gefunden habe:

Das Carriage Return (CR) -Zeichen ( 0x0D, \r) bewegt den Cursor an den Zeilenanfang, ohne zur nächsten Zeile zu gelangen. Dieses Zeichen wird in Commodore- und Early Macintosh-Betriebssystemen (OS-9 und früher) als neues Zeilenzeichen verwendet.

Das Zeilenvorschubzeichen (LF) ( 0x0A, \n) bewegt den Cursor nach unten zur nächsten Zeile, ohne zum Zeilenanfang zurückzukehren. Dieses Zeichen wird in UNIX-basierten Systemen (Linux, Mac OSX usw.) als neues Zeilenzeichen verwendet.

Die EOL-Sequenz (End of Line) ( 0x0D 0x0A, \r\n) besteht aus zwei ASCII-Zeichen, einer Kombination aus CR- und LF-Zeichen. Der Cursor bewegt sich sowohl nach unten zur nächsten Zeile als auch zum Anfang dieser Zeile. Dieses Zeichen wird in den meisten anderen Nicht-Unix-Betriebssystemen, einschließlich Microsoft Windows, Symbian OS und anderen, als neues Zeilenzeichen verwendet.

Quelle

Taylor Leese
quelle
1
Das "vertikale Tab" -Zeichen bewegt den Cursor nach unten und behält die Position in der Zeile bei, nicht das LF-Zeichen. Der LF ist EOL.
12431234123412341234123
2
@ TaylorLeese Sind / r / n und / n / r gleich?
Vicrobot
175

Da es keine Antwort gibt, die genau dies angibt, kurz zusammengefasst:

Wagenrücklauf (MAC vor OSX)

  • CR
  • \ r
  • ASCII-Code 13

Zeilenvorschub (Linux, MAC OSX)

  • LF
  • \ n
  • ASCII-Code 10

Wagenrücklauf und Zeilenvorschub (Windows)

  • CRLF
  • \ r \ n
  • ASCII-Code 13 und dann ASCII-Code 10

Wenn Sie ASCII-Code in einem seltsamen Format sehen, sind dies lediglich die Zahlen 13 und 10 in einem anderen Radix / einer anderen Basis, normalerweise Basis 8 (Oktal) oder Basis 16 (Hexadezimal).

http://www.bluesock.org/~willg/dev/ascii.html

ahnbizcad
quelle
46

Jeff Atwood hat kürzlich einen Blog-Beitrag dazu veröffentlicht: The Great Newline Schism

Hier ist die Essenz 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. Auf diesen Systemen wurde Text häufig routinemäßig erstellt, um mit diesen Druckern kompatibel zu sein, da das Konzept der Gerätetreiber, die solche Hardwaredetails vor der Anwendung verbergen, noch nicht gut entwickelt war. Anwendungen mussten direkt mit dem Fernschreiber sprechen und dessen Konventionen befolgen.Die Trennung der beiden Funktionen verbarg die Tatsache, dass der Druckkopf nicht in einem Zeichen von ganz rechts zum Anfang der nächsten Zeile zurückkehren konnte. Deshalb wurde die Sequenz immer zuerst mit der CR gesendet. Tatsächlich war es oft notwendig, zusätzliche Zeichen (fremde CRs oder NULs, die ignoriert werden) zu senden, um dem Druckkopf Zeit zu geben, sich zum linken Rand zu bewegen. Selbst nachdem Teletypen durch Computerterminals mit höheren Baudraten ersetzt wurden, unterstützten viele Betriebssysteme das automatische Senden dieser Füllzeichen, um die Kompatibilität mit billigeren Terminals zu gewährleisten, für die mehrere Zeichenzeiten erforderlich waren, um durch die Anzeige zu scrollen.

Manu
quelle
5
+1 Durch dieses einfache Verständnis erinnere ich mich immer daran, in welcher Reihenfolge die Kombination kommt. Noch heute können wir diese mechanische Logik in jedem Inktjet-Drucker sehen (ich liebe es zu verstehen, da ich es hasse zu lernen). Meine anderen Memory-Tricks sind: "mac? Return to sender" und "NewLineFeed" (um sich an NL === LF zu erinnern und um sich an \ n zu erinnern, da CR bereits das R in der Abkürzung hat)
GitaarLAB
3
"Ich bin zweifelhaft ... zwei Steuercodes waren für das Timing notwendig". Das steht nicht. Es heißt, dass die zusätzlichen CRs und NULs hier sind, um Zeit für die Rückkehr zu geben, nicht die ursprüngliche CR LF.
Julien Rousseau
11
@Adrian Wirst du eine persönliche Erfahrung machen? 1) In meinen alten Teletyp-Tagen war der von uns verwendete Drucker erforderlich <CR><CR><LF>- also habe ich natürlich nur mit einem experimentiert <CR>. Ich schickte <CR><LF>Anach einer langen Schlange, und Sie konnten das Drucken hörenA , bevor der Wagen vollständig zurückkam.
John Burger
11
@Adrian 2) Vergiss nicht, dies war in der elektromechanischen Ära, in der jeder Charakter genau eine Funktion hatte. Wir haben oft ein Wort hervorgehoben, indem wir die Zeile gedruckt, dann <CR><CR>die richtige Anzahl von Leerzeichen gesendet und eingegeben und dann dasselbe Wort erneut gedruckt haben: eine primitive Form der Fettschrift.
John Burger
3
@Adrian 3) Und schließlich wurde Baudot (oder Murray-Code) verwendet, nicht ASCII. Fünf Datenbits zwischen einem Startbit und eineinhalb Stoppbits. Wie kannst du ein halbes bisschen haben? Warten Sie eine halbe Weile, bevor Sie mit dem Senden des nächsten Zeichens beginnen, damit der Druckkopf Zeit hat, zur Mitte zurückzukehren.
John Burger
16

CR - ASCII - Code 13

LF - ASCII-Code 10.

Theoretisch bringt CR den Cursor auf die erste Position (links) zurück. LF füttert eine Zeile und bewegt den Cursor eine Zeile nach unten. So haben Sie früher Drucker und Monitore im Textmodus gesteuert. Diese Zeichen werden normalerweise verwendet, um das Zeilenende in Textdateien zu markieren. Unterschiedliche Betriebssysteme verwendeten unterschiedliche Konventionen. Wie Sie bereits betont haben, verwendet Windows die CR / LF-Kombination, während Macs vor OSX nur CR usw. verwenden.

DmitryK
quelle
7

Systeme, die auf ASCII oder einem kompatiblen Zeichensatz basieren, verwenden entweder LF (Zeilenvorschub, 0x0A, 10 in Dezimalzahl) oder CR (Wagenrücklauf, 0x0D, 13 in Dezimalzahl) einzeln oder CR gefolgt von LF (CR + LF, 0x0D 0x0A). Diese Zeichen basieren auf Druckerbefehlen: Der Zeilenvorschub zeigte an, dass eine Papierzeile aus dem Drucker herausgeführt werden sollte, und ein Wagenrücklauf zeigte an, dass der Druckerwagen zum Anfang der aktuellen Zeile zurückkehren sollte.

Hier sind die Details .

pierrotlefou
quelle
5

Der traurige Zustand von "Datensatztrennzeichen" oder "Leitungsterminatoren" ist ein Erbe des dunklen Zeitalters des Rechnens.

Nun nehmen wir an, dass alles, was wir darstellen möchten, in irgendeiner Weise strukturierte Daten sind und verschiedenen Abstraktionen entsprechen, die Zeilen, Dateien, Protokolle, Nachrichten, Markups usw. definieren.

Aber es war einmal nicht genau so. In Anwendungen integrierte Steuerzeichen und gerätespezifische Verarbeitung. Die hirntoten Systeme, die sowohl CR als auch LF benötigten, hatten einfach keine Abstraktion für Datensatztrennzeichen oder Zeilenabschlusszeichen. Die CR war erforderlich, damit der Teletyp oder die Videoanzeige zur ersten Spalte zurückkehrte, und die LF (heute NL, gleicher Code) war erforderlich, damit sie zur nächsten Zeile überging. Ich denke, die Idee, etwas anderes zu tun als die Rohdaten auf das Gerät zu übertragen, war zu komplex.

Unix und Mac haben tatsächlich eine Abstraktion für das Zeilenende angegeben. Stellen Sie sich das vor. Leider haben sie unterschiedliche angegeben. (Unix, ähm, stand an erster Stelle.) Und natürlich verwendeten sie einen Steuercode, der der SOP bereits "nahe" war

Da fast die gesamte heutige Betriebssoftware von Unix-, Mac- oder MS-Betriebssystemen abstammt, stecken wir in der Verwirrung um das Zeilenende.

DigitalRoss
quelle
1

NL abgeleitet von EBCDIC NL = x'15 ', was logisch mit CRLF x'odoa ascii verglichen werden würde ... dies wird deutlich, wenn Daten physisch von Mainframes in den mittleren Bereich verschoben werden. Umgangssprachlich (da nur arkane Leute ebcdic verwenden) wurde NL entweder mit CR oder LF oder CRLF gleichgesetzt

David
quelle