Ich denke, \n
bewegt die Nadel nach unten und \r
bewegt die Nadel an den Anfang einer Linie (linksbündig)? Ich bin mir aber nicht sicher. Also, wenn ich falsch liege, bitte korrigieren Sie mich ....
Jedenfalls wurde mir gesagt, dass Windows und Linux unterschiedlich newlines
und carriage returns
unterschiedlich umgehen . Ich würde gerne wissen, wie sie anders damit umgehen und an welchen Stellen es wichtig ist, sich daran zu erinnern. Danke für die Antwort.
linux
windows
newlines
carriage-return
千里 ち ゃ ゃ
quelle
quelle
\r\n
das in Windows in Ordnung\n\r
ist, aber nicht, und ich erinnere mich, dass\r\n
es ein Akronym für Registered Nurse ist. Ich habe auch gehört, dass dies unter\n
Linux verwendet wird und\r
nicht allein für den gleichen Zweck wie\r\n
.\r
wird in wirklich alten MacOS verwendet. Ich habe diese Fakten jedoch nicht überprüft.\r
und\n
, da die\n
Handhabung davon abhängt, wo Sie sie verwenden. Besser sie anrufenCR
undLF
.Antworten:
Das ist mehr oder weniger wahr, aber meistens eine historische Kuriosität. Ursprünglich wurde der Zeilenvorschub (LF) verwendet, um das Papier auf Druckern und Hardcopy-Terminals ( Ferndruckern ) um eine Zeile vorzuschieben . Wagenrücklauf (CR) brachte den Druckkopf an den Zeilenanfang zurück.
Dies funktioniert wahrscheinlich noch auf modernen Druckern, wenn sie im "Textmodus" verwendet werden, ist aber ansonsten heute von geringer Relevanz.
Der Unterschied ist einfach: OS-Designer mussten wählen, wie der Anfang einer neuen Zeile in Text in Computerdateien dargestellt werden soll. Aus verschiedenen historischen Gründen wurde in der Unix / Linux-Welt ein einzelnes LF-Zeichen als Zeilenumbruchsmarker ausgewählt. MS-DOS wählte CR + LF und Windows übernahm das. Daher verwenden unterschiedliche Plattformen unterschiedliche Konventionen.
In der Praxis wird dies immer weniger zum Problem. Der Newline-Marker ist eigentlich nur für Pogramme relevant, die "Nur-Text" verarbeiten, und es gibt nicht so viele - er betrifft meist nur Programmquellcode, Konfigurationsdateien und einige einfache Textdateien mit Dokumentation. Heutzutage können die meisten Programme, die diese Art von Dateien verarbeiten (Editoren, Compiler usw.), beide Newline-Konventionen verwenden, sodass es keine Rolle spielt, für welche Sie sich entscheiden.
In einigen Fällen bestehen die Tools auf "ihrer" Newline-Konvention (z. B. Unix-Shell-Skripte dürfen nicht CR + LF verwenden). In diesem Fall müssen Sie die richtige verwenden.
quelle
\n\r
und sehen Programmiersprachen\n
das Gleiche? Wenn ich zum Beispiel eine Textdatei analysiere, die auf einem anderen PC bearbeitet wurde und sowohl die Linux- als auch die Windows-Version von Zeilenumbrüchen enthält, würde ich dann einpreg_match
for ausführen\n
und\n\r
unterschiedliche Ergebnisse erhalten?CR und LF
Der amerikanische Standardcode für Informationsaustausch (ASCII) definierte Steuerzeichen, einschließlich CARRIAGE-RETURN (CR) und LINE-FEED (LF), die verwendet wurden (und werden), um die Druckposition auf Druckern auf analoge Weise zu steuern mechanische Schreibmaschinen, die früheren Computerdruckern vorausgingen.
Plattformabhängigkeit
In Windows ist das traditionelle Zeilentrennzeichen in Textdateien CR, gefolgt von LF
In alten (vor OSX) Apple Macintosh-Systemen war das traditionelle Zeilentrennzeichen in Textdateien CR
In Unix und Linux ist das traditionelle Zeilentrennzeichen in Textdateien LF.
\ n und \ r
In vielen Programmier- und Skriptsprachen
\n
bedeutet "neue Zeile". Manchmal (aber nicht immer) bedeutet dies, dass das ASCII-ZEILENFEED-Zeichen (LF) den Cursor (oder die Druckposition) um eine Zeile nach unten bewegt. In einem Drucker oder einer Schreibmaschine würde dies das Papier tatsächlich eine Zeile nach oben bewegen.Bedeutet immer
\r
das ASCII-Zeichen CARRIAGE-RETURN (CR), dessen Name tatsächlich von mechanischen Schreibmaschinen stammt, bei denen ein Wagenrücklaufschlüssel vorhanden war, der die Rolle ("Wagen") nach rechts bewegte, angetrieben von einer Feder. so weit es ging. So setzen Sie die aktuelle Tippposition auf den linken Rand.Programmierung
In einigen Programmiersprachen
\n
kann dies eine plattformabhängige Folge von Zeichen bedeuten, die Zeilen in einer Textdatei beenden oder trennen.print "\n"
Erzeugt beispielsweise in Perl unter Linux eine andere Zeichenfolge als unter Windows.In Java ist die beste Vorgehensweise, wenn Sie die nativen Zeilenenden für die Laufzeitplattform verwenden möchten, nicht
\n
oder\r
überhaupt nicht zu verwenden . Sie sollten verwendenSystem.getProperty("line.separator")
. Sie sollten\n
und\r
wo Sie möchten LF und CR unabhängig von der Plattform verwenden (z. B. wie in HTTP, FTP und anderen Internet-Kommunikationsprotokollen verwendet).Unix stty
In einer Unix-Shell kann der
stty
Befehl verwendet werden, um die Shell zu veranlassen, zwischen diesen verschiedenen Konventionen zu übersetzen. Beispielsweisestty -onlcr
veranlasst die Shell anschließend, alle ausgehenden LFs in CR LF zu übersetzen.Linux und OSX folgen den Unix-Konventionen
Textdateien
Textdateien sind nach wie vor enorm wichtig und weit verbreitet. Beispielsweise sind HTML und XML Beispiele für Textdateien. Die meisten wichtigen Internetprotokolle, wie z. B. HTTP, folgen den Konventionen für Textdateien und enthalten Spezifikationen für Zeilenenden.
Drucker
Die meisten anderen als die billigsten Drucker respektieren immer noch CR und LF. Tatsächlich sind sie für die am häufigsten verwendeten Seitenbeschreibungssprachen - PCL und Postscript - von grundlegender Bedeutung.
quelle
line.separator
. Es kommt wirklich darauf an, was Sie wollen.println()
automatisch verwendetline.separator
. Wenn Sie also native Zeilenenden möchten, können Sie diese verwendenprintln()
(und wenn Sie eine bestimmte Art von Zeilenende benötigen, verwenden Sie diese nicht, sondern verwenden Sie explizit "\ n" usw.).\n
es sich nicht um ASCII-LF-Steuerzeichen handelt (ausgenommen EBCDIC-basierte Systeme)? Ich beziehe mich auf das, was\n
in einem Zeichenketten- oder Zeichenliteral bedeutet, nicht auf den Effekt des Sendens an eine Datei oder ein Ausgabegerät.\n
ist immer ASCII (und Unicode) Code 10, weil das JLS dies explizit sagt (JLS 3.10.6, "Escape Sequences for Character and String Literals" - ich habe es überprüft :-)). Für andere Sprachen - gute Frage.Kurz gesagt, wurde für Drucker benötigt, aber jetzt machen es die Betriebssysteme etwas anders. In den meisten Fällen ist es in Ordnung, sowohl CR als auch LF zu machen,
\r\n
und in den meisten Fällen wird dies gut funktionieren.quelle
\r
oder führt es zu einer Verhaltensänderung?