791 Stimmen

Der Unterschied zwischen \n y \r ?

Was ist der Unterschied zwischen \n (Zeilenumbruch) und \r (Wagenrücklauf)?

Gibt es insbesondere irgendwelche praktisch Unterschiede zwischen \n y \r ? Gibt es Stellen, an denen die eine statt der anderen verwendet werden sollte?

1018voto

Alex Martelli Punkte 805329

In Ascii-Zahlen ausgedrückt, ist es 3, da sie 10 bzw. 13 sind;-).

Aber im Ernst, es gibt viele:

  • in Unix und allen Unix-ähnlichen Systemen, \n ist der Code für das Zeilenende, \r bedeutet nichts Besonderes
  • in C und den meisten Sprachen, die es (auch nur im Entferntesten) kopieren, \n ist die Standard-Escape-Sequenz für das Ende einer Zeile (je nach Bedarf in/aus betriebssystemspezifischen Sequenzen übersetzt)
  • in alten Mac-Systemen (vor OS X), \r war stattdessen der Code für das Zeilenende
  • in Windows (und vielen alten Betriebssystemen) ist der Code für das Ende einer Zeile 2 Zeichen, \r\n in dieser Reihenfolge
  • als (überraschende;-) Folge (in Anlehnung an Betriebssysteme, die viel älter als Windows sind), \r\n ist der Standard-Zeilenabschluß für Textformate im Internet
  • für elektromechanische fernschreiberähnliche "Terminals", \r befiehlt dem Schlitten, nach links zurückzufahren, bis er den linken Anschlag erreicht (ein langsamer Vorgang), \n befiehlt der Walze, eine Zeile aufzurollen (ein viel schnellerer Vorgang) - das ist der Grund, warum Sie immer eine \r antes de \n so dass sich die Rolle bewegen kann, während der Wagen noch nach links fährt!-) Wikipedia hat eine genauere Erklärung .
  • für Terminals im Zeichenmodus (die typischerweise noch ältere Drucker wie oben emulieren), im Rohmodus, \r y \n ähnlich funktionieren (außer in Bezug auf den Cursor, da es es kein Schlitten und keine Rolle;-)

In der Praxis sollten Sie im modernen Kontext des Schreibens in eine Textdatei immer die \n (die zugrundeliegende Laufzeitumgebung wird das übersetzen, wenn Sie ein seltsames Betriebssystem, z.B. Windows, verwenden;-). Der einzige Grund für die Verwendung von \r ist, wenn Sie in ein Zeichenterminal (oder eher ein "Konsolenfenster", das es emuliert) schreiben und wollen, dass die nächste Zeile, die Sie schreiben, die letzte überschreibt, die Sie gerade geschrieben haben (manchmal für alberne "Ascii-Animations"-Effekte von z.B. Fortschrittsbalken verwendet) -- das wird in einer Welt der GUIs allerdings ziemlich veraltet;-).

185voto

tster Punkte 17284

Historisch gesehen ein \n wurde verwendet, um den Schlitten nach unten zu bewegen, während die \r wurde verwendet, um den Schlitten zurück an den linken Rand der Seite zu bewegen.

64voto

pavium Punkte 14270

Zwei unterschiedliche Charaktere.

\n wird als Zeilenende in Unix-Textdateien verwendet

\r Wurde in der Vergangenheit (vor OS X) als Zeilenende in Mac-Textdateien verwendet.

\r\n (d.h. beide zusammen) werden verwendet, um Zeilen in Windows- und DOS-Textdateien zu beenden.

37voto

nothingisnecessary Punkte 6153

Da es sonst niemand ausdrücklich erwähnt hat (sind sie zu jung, um es zu wissen/erinnern?) - vermute ich, dass die Verwendung von \r\n die ursprünglich für Schreibmaschinen und ähnliche Geräte bestimmt waren.

Wenn man mit einer mehrzeiligen Schreibmaschine eine neue Zeile beginnen wollte, musste sie zwei physische Aktionen ausführen: den Schlitten an den Anfang der Seite (in den USA links) zurückschieben und das Papier eine Kerbe höher schieben.

In der Zeit der Zeilendrucker bestand die einzige Möglichkeit, fett gedruckten Text zu erstellen, darin, einen Wagenrücklauf OHNE Zeilenumbruch durchzuführen und die gleichen Zeichen über die alten zu drucken, wodurch mehr Tinte hinzugefügt wurde und der Text dunkler (fett gedruckt) erschien. Wenn die mechanische "Zeilenumbruch"-Funktion in einer Schreibmaschine versagte, war dies das ärgerliche Ergebnis: Man konnte die vorherige Textzeile übertippen, wenn man nicht aufpasste.

18voto

a432511 Punkte 1807

Zwei verschiedene Zeichen für verschiedene Betriebssysteme. Auch dies spielt eine Rolle bei der Datenübertragung über TCP/IP die die Verwendung von \r\n .

\n Unix

\r Mac

\r\n Windows und DOS.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X