Besteht der Windows-Wagenrücklauf \ r \ n aus zwei Zeichen oder einem Zeichen?

74

Windows Wagenrücklauf wird \r\nunter \nUnix \r\nals zwei Zeichen behandelt?

Oh Chin Boon
quelle

Antworten:

113

Dies sind zwei Zeichen:

  • \r ist Wagenrücklauf;
  • \n ist Zeilenvorschub.

Zwei Zeichen zusammen repräsentieren eine neue Zeile unter Windows. Während unter Linux \nneue Linie darstellt. Der Cursor bewegt sich unter Linux an den Anfang einer neuen Zeile. Unter Windows bleibt der Cursor in derselben Spalte in der Konsole, jedoch in der nächsten Zeile.

\rUnter Linux hat dies den gleichen Effekt wie unter Windows: Bewegt den Cursor an den Zeilenanfang. Es ist möglich, verschiedene Informationen in derselben Zeile zu drucken, in \rder anstelle von verwendet wird \n.

Alexey Ivanov
quelle
3
+1. Als zusätzliche Info zum OP: Newline .
informatik01
7

Eigentlich \r is 0x0D (^M) and \n is 0x0A (^J)aber ..... unter Windows:

\n will write 0x0D 0x0A

unter Unix:

\r will write 0x0D
\n will write 0x0A
TMS
quelle
Daher sollten wir unter Windows \ x0A explizit drucken, wenn wir eine Zeile nach unten verschieben möchten, während wir in derselben Spalte bleiben.
Viet
Wenn ich recht habe, liegt dies an der Zeichenkonvertierung beim Öffnen von Dateien als Textströme. Die Behandlung stdoutals Binärdatenstrom anstelle eines Textstroms würde dazu führen \n, dass die Sohle 0x0Anicht unter 0x0D 0x0AWindows geschrieben wird. Siehe die Antwort von @FredFoo.
Loxaxs
6

Kommt auf die Einstellung an. \r\nist zwei Bytes breit (in ASCII, UTF-8 usw.), aber E / A-Bibliotheken wie die C- stdioBibliothek und andere können im Textmodus zwischen \nund \r\nquasi transparent übersetzen.

Dh auf einer Windows-Plattform ein C-Programm, das einen Textmodus-Stream txt_inmit liest

while ((c = getc(txt_in)) != EOF)
    printf("%02x\n", c);

meldet den ASCII-Code für nicht \r. Umgekehrt putc('\n', txt_out)wird tatsächlich \r\nin den Textmodus-Stream geschrieben txt_out.

Fred Foo
quelle
5

Windows unterscheidet nicht zwischen \r\nzwei anderen Zeichen. Es gibt jedoch eine Situation, in der es als ein Zeichen behandelt wird: Wenn Sie die C-Laufzeit verwenden und eine Datei als Text öffnen, wird \r\ndie Datei als gelesen \nund \nin die Datei als geschrieben \r\n.

ymett
quelle
3

Ja, es sind zwei Zeichen: Wagenrücklauf '\ r' gefolgt von Zeilenvorschub '\ n'.

Peter Ruderman
quelle
0

Ich führte einige Tests (nichts Besonderes) mit Notepad ++ und Sublime Text 2 auf Windows, und es stellt sich heraus , dass \rund \nin der Tat zwei unterschiedliche Charaktere sind, aber ...

Verschiedene Texteditoren werden möglicherweise eingefügt oder nicht, \rwenn die Eingabetaste gedrückt wird.

Versuchen Sie Folgendes in Ihrem Texteditor:

1
2
3
4
5

Drücken Sie dann Strg + F , aktivieren Sie reguläre Ausdrücke und suchen Sie nach \r. Abhängig von Ihrem Texteditor und seinen Einstellungen können Sie am Ende jeder Zeile ein Zeichen "treffen" oder "nicht treffen". Wenn der obige Text aus einem anderen Editor kopiert wird, kann sich auch das Verhalten unterscheiden ...

Einige Texteditoren ermöglichen Anpassungen in ihren Einstellungen, in dem Sie festlegen können , wenn Sie es vorziehen , \r\noder Unix-Stil \neingeführt werden , wenn Sie die Taste Return . Darüber hinaus können Sie möglicherweise festlegen , dass ein konsistenter Stil erzwungen werden soll, indem Sie das \rZeichen entfernen oder einfügen , bevor Sie eine Datei speichern.

Asotos
quelle
4
Sie sollten sich nicht auf einen Texteditor verlassen, da einige von ihnen beim Laden der Datei etwas Magisches bewirken können. Die richtige Möglichkeit zur Überprüfung besteht darin, die Datei in einem Hex-Editor zu öffnen.
Telemat