Zeilenumbruch

Aus besserwiki.de
Zeilenumbruch zwischen den Wörtern "Hallo" und "Welt"

Newline (häufig auch Zeilenende, Zeilenende (EOL), nächste Zeile (NEL) oder Zeilenumbruch genannt) ist ein Steuerzeichen oder eine Folge von Steuerzeichen in einer Zeichenkodierungsspezifikation (z. B. ASCII, EBCDIC), die verwendet wird, um das Ende einer Textzeile und den Beginn einer neuen Zeile zu kennzeichnen.

Der Begriff Zeilenumbruch stammt aus der elektronischen Textverarbeitung und gibt an, an welcher Stelle ein Text von einer Zeile in die nächste übergehen soll. Häufig spricht man nur kurz vom Umbruch.

Geschichte

Mitte des 18. Jahrhunderts, lange vor dem Aufkommen von Fernschreibern und Fernschreibmaschinen, erfanden und verwendeten Telegrafisten Morsezeichen, um die Formatierung von Leerzeichen in formellen schriftlichen Textnachrichten zu kodieren. Insbesondere das Morsezeichen BT (mnemonischer Umbruchtext), das aus der Verkettung der Morsezeichen "B" und "T" besteht, die ohne den normalen Abstand zwischen den Zeichen gesendet werden, wird im Morsecode verwendet, um eine neue Zeile oder einen neuen Abschnitt in einer formellen Textnachricht zu kodieren und anzuzeigen.

Später, im Zeitalter der modernen Fernschreiber, wurden standardisierte Zeichenkontrollcodes entwickelt, um die Formatierung von Texten mit Leerzeichen zu erleichtern. ASCII wurde gleichzeitig von der Internationalen Organisation für Normung (ISO) und der American Standards Association (ASA) entwickelt, der Vorgängerorganisation des American National Standards Institute (ANSI). Im Zeitraum von 1963 bis 1968 unterstützten die ISO-Normentwürfe die Verwendung von CR+LF oder LF allein als Zeilenumbruch, während die ASA-Entwürfe nur CR+LF unterstützten.

Die Sequenz CR+LF wurde häufig auf vielen frühen Computersystemen verwendet, die Teletype-Maschinen - in der Regel ein Teletype Model 33 ASR - als Konsolengerät eingesetzt hatten, da diese Sequenz erforderlich war, um diese Drucker am Anfang einer neuen Zeile zu positionieren. Die Aufteilung des Zeilenumbruchs in zwei Funktionen verbarg die Tatsache, dass der Druckkopf nicht rechtzeitig von ganz rechts zum Anfang der nächsten Zeile zurückkehren konnte, um das nächste Zeichen zu drucken. Jedes Zeichen, das nach einem CR gedruckt wurde, wurde oft als Fleck in der Mitte der Seite gedruckt, während der Druckkopf den Wagen noch zurück zur ersten Position bewegte. "Die Lösung bestand darin, aus dem Zeilenumbruch zwei Zeichen zu machen: CR, um den Wagen zur ersten Spalte zu bewegen, und LF, um das Papier nach oben zu bewegen." Tatsächlich war es oft notwendig, zusätzliche Zeichen zu senden - CRs oder NULs -, die zwar ignoriert wurden, aber dem Druckkopf Zeit gaben, sich an den linken Rand zu bewegen. Viele frühe Videobildschirme benötigten auch mehrere Zeichen, um die Anzeige zu scrollen.

Auf solchen Systemen mussten die Anwendungen direkt mit der Teletype-Maschine kommunizieren und deren Konventionen befolgen, da das Konzept der Gerätetreiber, die solche Hardware-Details vor der Anwendung verbergen, noch nicht ausgereift war. Daher wurde der Text routinemäßig so verfasst, dass er den Anforderungen der Teletype-Maschinen entsprach. Die meisten Minicomputersysteme von DEC verwendeten diese Konvention. CP/M verwendete sie ebenfalls, um auf denselben Terminals zu drucken, die auch die Minicomputer verwendeten. MS-DOS (1981) übernahm CP/Ms CR+LF, um kompatibel zu sein, und diese Konvention wurde vom späteren Windows-Betriebssystem von Microsoft übernommen.

Das Multics-Betriebssystem wurde ab 1964 entwickelt und verwendete nur LF als Zeilenumbruch. Multics verwendete einen Gerätetreiber, um dieses Zeichen in die vom Drucker benötigte Sequenz zu übersetzen (einschließlich zusätzlicher Füllzeichen), und das einzelne Byte war für die Programmierung bequemer. Die naheliegendere Wahl - CR - wurde nicht verwendet, da CR die nützliche Funktion bot, eine Zeile mit einer anderen zu überdrucken, um Fettdruck-, Unterstreichungs- und Durchstreichungseffekte zu erzeugen. Vielleicht noch wichtiger ist, dass die Verwendung von LF als alleiniges Zeilenendezeichen bereits in Entwürfen des späteren ISO/IEC 646-Standards enthalten war. Unix folgte der Multics-Praxis, und spätere Unix-ähnliche Systeme folgten Unix. Dies führte zu Konflikten zwischen Windows und Unix-ähnlichen Betriebssystemen, wobei Dateien, die auf einem Betriebssystem erstellt wurden, von einem anderen Betriebssystem nicht richtig formatiert oder interpretiert werden konnten (z. B. ein UNIX-Shell-Skript, das in einem Windows-Texteditor wie Notepad geschrieben wurde).

Darstellung

Die Begriffe Wagenrücklauf (CR) und Zeilenvorschub (LF) sind eng miteinander verbunden und können entweder getrennt oder zusammen betrachtet werden. Bei den physischen Medien Schreibmaschine und Drucker sind zwei Bewegungsachsen, "nach unten" und "quer", erforderlich, um eine neue Zeile auf der Seite zu erzeugen. Obwohl die Konstruktion einer Maschine (Schreibmaschine oder Drucker) diese beiden Achsen getrennt betrachten muss, kann die abstrakte Logik der Software sie zu einem einzigen Ereignis zusammenfassen. Aus diesem Grund kann ein Zeilenumbruch in der Zeichenkodierung definiert werden als CR und LF kombiniert werden (gemeinhin als CR+LF oder CRLF).

Einige Zeichensätze bieten einen separaten Code für Zeilenumbrüche. EBCDIC z. B. bietet zusätzlich zu den CR- und LF-Codes einen NL-Zeichencode. Unicode bietet neben den ASCII-Steuercodes CR und LF auch einen Steuercode für die "nächste Zeile" (NEL) sowie Steuercodes für "Zeilentrennzeichen" und "Absatztrennzeichen".

Softwareanwendungen und Betriebssystemdarstellung eines Zeilenumbruchs mit einem oder zwei Steuerzeichen
Betriebssystem Zeichencodierung Abkürzung Hex-Wert dez-Wert Escape-Sequenz
Unix und Unix-ähnliche Systeme (Linux, macOS, FreeBSD, AIX, Xenix, usw.), Multics, BeOS, Amiga, RISC OS, und andere ASCII LF 0A 10 \n
Microsoft Windows, DOS (MS-DOS, PC DOS, usw.), Atari TOS, DEC TOPS-10, RT-11, CP/M, MP/M, OS/2, Symbian OS, Palm OS, Amstrad CPC und die meisten anderen frühen Nicht-Unix- und Nicht-IBM-Betriebssysteme CR LF 0D 0A 13 10 \r\n
Commodore 8-Bit-Maschinen (C64, C128), Acorn BBC, ZX Spectrum, TRS-80, Apple II-Serie, Oberon, das klassische Mac OS, MIT Lisp Machine und OS-9 CR 0D 13 \r
QNX-Vor-POSIX-Implementierung (Version < 4) RS 1E 30 \036
Acorn BBC und RISC OS spooled text output LF CR 0A 0D 10 13 \n\r
Atari 8-Bit-Maschinen ATASCII 9B 155
IBM-Mainframe-Systeme, einschließlich z/OS (OS/390) und IBM i (OS/400) EBCDIC NL 15 21 \025
ZX80 und ZX81 (Heimcomputer von Sinclair Research Ltd) verwendeten einen speziellen Nicht-ASCII-Zeichensatz NEWLINE 76 118
  • EBCDIC-Systeme - hauptsächlich IBM-Mainframe-Systeme, einschließlich z/OS (OS/390) und IBM i (OS/400) - verwenden NL (New Line, 0x15) als das Zeichen, das die Funktionen von Zeilenvorschub und Wagenrücklauf kombiniert. Das entsprechende Unicode-Zeichen (0x85) wird NEL (Next Line) genannt. EBCDIC hat auch Steuerzeichen namens CR und LF, aber der numerische Wert von LF (0x25) unterscheidet sich von dem von ASCII (0x0A) verwendeten. Außerdem verwenden einige EBCDIC-Varianten auch NL, weisen dem Zeichen aber einen anderen numerischen Code zu. Diese Betriebssysteme verwenden jedoch ein datensatzbasiertes Dateisystem, das Textdateien als einen Datensatz pro Zeile speichert. In den meisten Dateiformaten werden keine Zeilenabschlüsse gespeichert.
  • Die Betriebssysteme für die CDC 6000-Serie definierten einen Zeilenumbruch als zwei oder mehr nullwertige Sechs-Bit-Zeichen am Ende eines 60-Bit-Worts. Einige Konfigurationen definierten ein nullwertiges Zeichen auch als Doppelpunkt, mit dem Ergebnis, dass mehrere Doppelpunkte je nach Position als Zeilenumbruch interpretiert werden konnten.
  • RSX-11 und OpenVMS verwenden auch ein Record-basiertes Dateisystem, das Textdateien als einen Record pro Zeile speichert. In den meisten Dateiformaten werden keine Zeilenabschlüsse gespeichert, aber die Record Management Services können transparent einen Abschluss an jede Zeile anfügen, wenn diese von einer Anwendung abgerufen wird. Die Datensätze selbst können dieselben Zeilenabschlusszeichen enthalten, was je nach Anwendung entweder als Feature oder als störend empfunden werden kann. RMS speicherte nicht nur Datensätze, sondern auch Metadaten über die Satztrennzeichen in verschiedenen Bits für die Datei, um die Sache noch komplizierter zu machen (da Dateien Datensätze mit fester Länge, Datensätze, denen eine Zählung vorangestellt war, oder Datensätze, die durch ein bestimmtes Zeichen abgeschlossen wurden, enthalten konnten). Die Bits waren nicht allgemeingültig, d. h. sie konnten zwar festlegen, dass CRLF oder LF oder sogar CR das Zeilenende war, aber sie konnten nicht durch einen anderen Code ersetzt werden.
  • Einige frühe Mainframe-Betriebssysteme verwendeten feste Zeilenlängen. In einem solchen System wurde z. B. alle 72 oder 80 Zeichen ein implizites Zeilenende angenommen. Es wurde kein Zeilenumbruchzeichen gespeichert. Wurde eine Datei aus der Außenwelt importiert, mussten Zeilen, die kürzer als die Zeilenlänge waren, mit Leerzeichen aufgefüllt werden, während Zeilen, die länger als die Zeilenlänge waren, abgeschnitten werden mussten. Dies ähnelte der Verwendung von Lochkarten, bei denen jede Zeile auf einer separaten Karte gespeichert wurde, in der Regel mit 80 Spalten auf jeder Karte, oft mit laufenden Nummern in den Spalten 73-80. Viele dieser Systeme fügten am Anfang des nächsten Datensatzes ein Wagensteuerzeichen ein, das anzeigen konnte, ob der nächste Datensatz eine Fortsetzung der durch den vorhergehenden Datensatz begonnenen Zeile oder eine neue Zeile war, oder ob die vorhergehende Zeile überdruckt werden sollte (ähnlich wie ein CR). Oft war dies ein normales Druckzeichen wie # das daher nicht als erstes Zeichen in einer Zeile verwendet werden konnte. Einige frühe Zeilendrucker interpretierten diese Zeichen direkt in den an sie gesendeten Datensätzen.
Mit gedit unter Linux erstellte Textdatei in einem Hex-Editor.
Außer den Textobjekten sieht man nur die als 0A codierten Zeilenvorschübe.

Bei der Entwicklung des ASCII-Zeichensatzes wurden zwei Zeichen reserviert:

  • Das Steuerzeichen für den Zeilenvorschub (englisch line feed, kurz LF) ist als ASCII-Zeichen 10 (hexadezimal 0A) kodiert. Manche Systeme erlauben es, das LF-Zeichen mit der Tastenkombination Strg+J einzugeben.
  • Das Steuerzeichen für den Wagenrücklauf (englisch carriage return, kurz CR) ist als ASCII-Zeichen 13 (hexadezimal 0D) kodiert. Manche Systeme erlauben es, das CR-Zeichen mit der Tastenkombination Strg+M einzugeben.

Auf IBM-Großrechnern ist der Zeilenumbruch in den Dateien kein Steuerzeichen. Vielmehr wird die Zeilenlänge im DCB (Recordformat F oder FB) beziehungsweise in einem Längenfeld am Zeilenanfang (Recordformat V oder VB) gespeichert.

Bei Mac OS X finden sich aufgrund der weitgehenden Kompatibilität zum Vorgänger Mac OS noch einige Textformate, die CR statt LF als Zeilentrenner verwenden. Viele moderne Mac OS X-Programme können daher mit beiden Formaten in Textdateien umgehen. Bei der Verwendung von falsch deklarierten Dateien, die CR LF verwenden, führt dies bei einigen Programmen dazu, dass Zeilenumbrüche doppelt erzeugt werden. Lediglich Dateien, die aus der BSD- bzw. Unix-Welt stammen, sind meist zwingend an LF als Zeilentrenner gebunden.

Unterschieden wird in der Textformatierung der Textverarbeitungssysteme zwischen einem Absatzwechsel und einem Zeilenwechsel, sowie zwischen hartem (manuellem) und weichem (automatischem) Zeilenumbruch. Die nachfolgend genannten Eingabemethoden und Steuerzeichen entsprechen den Konventionen verbreiteter Textverarbeitungsprogramme; abweichende Bedienung und Darstellung je nach System sind jedoch möglich.

Weitere Umbruchsituationen der Zeile ergeben sich sowohl beim Seitenwechsel (Ganzseitenumbruch) als auch beim Spaltensatz (Spaltenumbruch).

Im Druckwesen wird das Umbrechen der Zeilen unter Berücksichtigung von Spalten und Seiten sowie um Bildelemente, Grafiken und Ähnliches Mettage genannt. In der elektronischen Datenverarbeitung übernimmt dies die Textverarbeitungssoftware. Je leistungsfähiger letztere ist, desto schöner und lesbarer ist das Umbruchsbild.

Unicode

Der Unicode-Standard definiert eine Reihe von Zeichen, die konforme Anwendungen als Zeilenendezeichen erkennen sollten:

 LF: Zeilenvorschub, U+000A
 VT: Vertikaler Tabulator, U+000B
 FF: Formvorschub, U+000C
 CR: Wagenrücklauf, U+000D
 CR+LF: CR (U+000D) gefolgt von LF (U+000A)
 NEL: Nächste Zeile, U+0085
 LS:    Zeilentrennzeichen, U+2028
 PS: Absatztrennzeichen, U+2029

Dies mag im Vergleich zu einem Ansatz, bei dem alle Zeilenbegrenzer in ein einziges Zeichen, z. B. LF, umgewandelt werden, übermäßig kompliziert erscheinen. Unicode wurde jedoch so konzipiert, dass alle Informationen bei der Konvertierung einer Textdatei von einer bestehenden Kodierung nach Unicode und zurück erhalten bleiben. Daher sollte Unicode Zeichen enthalten, die in bestehenden Kodierungen enthalten sind.

Zum Beispiel: NL ist Teil von EBCDIC, das den Code 0x15 verwendet; es wird normalerweise auf Unicode NEL, 0x85, abgebildet, das ein Steuerzeichen im C1-Steuersatz ist. Als solches ist es von ECMA 48 definiert und wird von Kodierungen erkannt, die mit ISO/IEC 2022 (entspricht ECMA 35) konform sind. Der C1-Steuersatz ist auch mit ISO-8859-1 kompatibel. Der im Unicode-Standard verfolgte Ansatz ermöglicht eine informationserhaltende Round-Trip-Transformation, die es den Anwendungen dennoch ermöglicht, alle möglichen Arten von Zeilenabschlüssen zu erkennen.

Die Erkennung und Verwendung von Zeilenumbruchcodes größer als 0x7F (NEL, LS und PS) wird nicht oft durchgeführt. Sie sind in UTF-8 mehrere Bytes lang, und der Code für NEL wurde in Windows-1252 als Ellipsis () Zeichen in Windows-1252 verwendet. Zum Beispiel:

  • ECMAScript akzeptiert LS und PS als Zeilenumbrüche, betrachtet aber U+0085 (NEL) als Whitespace anstelle eines Zeilenumbruchs.
  • Windows 10 behandelt NEL, LS oder PS im Standardtexteditor Notepad nicht als Zeilenumbruch.
  • gedit, der Standard-Texteditor der GNOME-Desktop-Umgebung, behandelt LS und PS als Zeilenumbrüche, aber nicht für NEL.
  • JSON erlaubt LS- und PS-Zeichen innerhalb von Strings, während ECMAScript vor ES2019 sie als Zeilenumbrüche und damit als illegale Syntax behandelte.
  • YAML erkennt sie ab Version 1.2 nicht mehr als Sonderzeichen an, um mit JSON kompatibel zu sein.

Beachten Sie auch, dass die Unicode-Sonderzeichen U+2424 (SYMBOL FOR NEWLINE, ), U+23CE (RÜCKGABESYMBOL, ), U+240D (SYMBOL FÜR WAGENRÜCKLAUF, ) und U+240A (SYMBOL FÜR Zeilennachschub, ) sind Glyphen, die dazu bestimmt sind, dem Leser des Dokuments ein für den Benutzer sichtbares Zeichen zu präsentieren, und werden daher selbst nicht als Zeilenumbruch erkannt.

Für Unicode-Texte fordert der Unicode-Standard im Unicode-Zeilenumbruch-Algorithmus von Software, die unicodekonform sein soll, dass neben den oben genannten und in unicodekonformen Zeichenfolgen CR, LF und CR LF folgende weitere Zeichen als Zeilenumbrüche erkannt werden:

Abkürzung englische Bezeichnung deutsche Bezeichnung Codepoint
FF Form Feed Seitenvorschub (mit zwangsläufigem Umbruch der Zeile) U+000C
NEL Next Line Nächste Zeile U+0085
LS Line Separator Zeilentrenner U+2028
PS Paragraph Separator Absatztrenner U+2029

In Programmiersprachen

Um die Erstellung portabler Programme zu erleichtern, stellen Programmiersprachen einige Abstraktionen zur Verfügung, um mit den verschiedenen Arten von Zeilenumbruchsequenzen umzugehen, die in unterschiedlichen Umgebungen verwendet werden.

Die Programmiersprache C bietet die Escape-Sequenzen '\n' (Zeilenumbruch) und '\r' (Wagenrücklauf). Diese müssen jedoch nicht mit den ASCII-Steuerzeichen LF und CR übereinstimmen. Der C-Standard garantiert nur zwei Dinge:

  1. Jede dieser Escape-Sequenzen entspricht einer eindeutigen, durch die Implementierung definierten Zahl, die in einem einzigen Zeichenwert gespeichert werden kann.
  2. Beim Schreiben in eine Datei, einen Geräteknoten oder ein Socket/Fifo im Textmodus wird "\n" transparent in die systemeigene Zeilenumbruchsequenz übersetzt, die länger als ein Zeichen sein kann. Beim Lesen im Textmodus wird die systemeigene Zeilenumbruchsequenz wieder in '\n' übersetzt. Im Binärmodus erfolgt keine Übersetzung, und die durch '\n' erzeugte interne Darstellung wird direkt ausgegeben.

Auf Unix-Plattformen, wo C seinen Ursprung hat, ist die native Zeilenumbruchsequenz ASCII LF (0x0A), so dass '\n' einfach als dieser Wert definiert wurde. Da die interne und die externe Darstellung identisch sind, ist die im Textmodus durchgeführte Übersetzung ein No-op, und Unix kennt keinen Text- oder Binärmodus. Dies hat viele Programmierer, die ihre Software auf Unix-Systemen entwickelt haben, dazu veranlasst, diese Unterscheidung einfach zu ignorieren, was dazu führte, dass der Code nicht auf andere Plattformen übertragbar war.

Die C-Bibliotheksfunktion fgets() wird im Binärmodus am besten vermieden, da jede Datei, die nicht mit der Unix-Newline-Konvention geschrieben wurde, falsch gelesen wird. Auch im Textmodus wird jede Datei, die nicht mit der systemeigenen Zeilenumbruchsequenz geschrieben wurde (z. B. eine Datei, die auf einem Unix-System erstellt und dann auf ein Windows-System kopiert wurde), falsch gelesen.

Ein weiteres häufiges Problem ist die Verwendung von '\n' bei der Kommunikation über ein Internet-Protokoll, das die Verwendung von ASCII CR+LF für Zeilenenden vorschreibt. Das Schreiben von "\n" in einen Textmodus-Stream funktioniert auf Windows-Systemen korrekt, erzeugt aber auf Unix nur LF und auf exotischeren Systemen etwas völlig anderes. Die Verwendung von "\r\n" im Binärmodus ist etwas besser.

Viele Sprachen wie C++, Perl und Haskell bieten die gleiche Interpretation von "\n" wie C. C++ verfügt über ein alternatives E/A-Modell, bei dem der Manipulator std::endl zur Ausgabe eines Zeilenumbruchs verwendet werden kann (und den Stream-Puffer leert).

Java, PHP und Python bieten die '\r\n'-Sequenz (für ASCII CR+LF). Im Gegensatz zu C wird garantiert, dass diese die Werte U+000D bzw. U+000A darstellen.

Die Java-I/O-Bibliotheken übersetzen diese nicht transparent in plattformabhängige Zeilenumbruchsequenzen bei der Eingabe oder Ausgabe. Stattdessen bieten sie Funktionen zum Schreiben einer vollständigen Zeile, die automatisch die native Zeilenumbruchsequenz hinzufügen, und Funktionen zum Lesen von Zeilen, die CR, LF oder CR+LF als Zeilenende akzeptieren (siehe BufferedReader.readLine()). Die Methode System.lineSeparator() kann verwendet werden, um das zugrunde liegende Zeilentrennzeichen abzurufen.

Beispiel:

   String eol = System.lineSeparator();
   String lineColor = "Farbe: Rot" + eol; <span title="Aus: Englische Wikipedia, Abschnitt &quot;In programming languages&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Newline#In_programming_languages <span style="color:#dddddd">ⓘ</span>]</span>

Python erlaubt "Universal Newline Support" beim Öffnen einer Datei zum Lesen, beim Importieren von Modulen und beim Ausführen einer Datei.

Einige Sprachen haben spezielle Variablen, Konstanten und Unterroutinen entwickelt, um Zeilenumbrüche während der Programmausführung zu erleichtern. In einigen Sprachen wie PHP und Perl sind doppelte Anführungszeichen erforderlich, um alle Escape-Sequenzen, einschließlich '\n' und '\r', zu ersetzen. Um Portabilitätsprobleme zu vermeiden, sollten in PHP Zeilenumbrüche mit der PHP_EOL-Konstante ausgegeben werden.

Beispiel in C#:

   string eol = Environment.NewLine;
   string lineColor = "Farbe: Rot" + eol; <span title="Aus: Englische Wikipedia, Abschnitt &quot;In programming languages&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Newline#In_programming_languages <span style="color:#dddddd">ⓘ</span>]</span>

   string eol2 = "\n";
   string lineColor2 = "Farbe: Blau" + eol2;

Probleme mit verschiedenen Zeilenumbruchformaten

Eine Textdatei, die mit gedit erstellt und mit einem Hex-Editor betrachtet wurde. Neben den Textobjekten gibt es nur noch EOL-Marker mit dem hexadezimalen Wert 0A.

Die unterschiedlichen Zeilenumbruchskonventionen führen dazu, dass Textdateien, die zwischen Systemen unterschiedlichen Typs übertragen wurden, nicht korrekt angezeigt werden.

Text in Dateien, die mit Programmen erstellt wurden, die unter Unix-ähnlichen Systemen oder dem klassischen Mac OS üblich sind, erscheinen bei den meisten Programmen, die unter MS-DOS und Microsoft Windows üblich sind, als eine einzige lange Zeile, da diese keinen einzelnen Zeilenvorschub oder einen einzelnen Wagenrücklauf nicht als Zeilenumbruch anzeigen.

Umgekehrt kann bei der Anzeige einer Datei, die von einem Windows-Computer auf einem Unix-artigen System stammt, das zusätzliche CR als zweiter Zeilenumbruch, als ^M oder als <cr> am Ende jeder Zeile angezeigt werden.

Außerdem kann es vorkommen, dass andere Programme als Texteditoren eine Datei, z. B. eine Konfigurationsdatei, die mit der fremden Zeilenumbruchskonvention kodiert ist, nicht als gültige Datei akzeptieren.

Das Problem kann schwer zu erkennen sein, weil einige Programme die fremden Zeilenumbrüche richtig handhaben, während andere dies nicht tun. So kann beispielsweise ein Compiler mit obskuren Syntaxfehlern fehlschlagen, obwohl die Quelldatei korrekt aussieht, wenn sie auf der Konsole oder in einem Editor angezeigt wird. Moderne Texteditoren erkennen in der Regel alle Arten von CR+LF-Zeilenumbrüchen und ermöglichen es dem Benutzer, zwischen den verschiedenen Standards zu konvertieren. Webbrowser sind in der Regel auch in der Lage, Textdateien und Websites anzuzeigen, die verschiedene Arten von Zeilenumbrüchen verwenden.

Selbst wenn ein Programm verschiedene Zeilenumbruchkonventionen unterstützt, sind diese Funktionen oft nicht ausreichend gekennzeichnet, beschrieben oder dokumentiert. In der Regel wird dem Benutzer ein Menü oder ein Kombinationsfeld mit verschiedenen Zeilenumbruchkonventionen angezeigt, ohne dass angegeben wird, ob die Auswahl die Zeilenumbrüche neu interpretiert, vorübergehend konvertiert oder dauerhaft konvertiert. Einige Programme konvertieren implizit beim Öffnen, Kopieren, Einfügen oder Speichern - oft auf inkonsistente Weise.

Die meisten textbasierten Internetprotokolle (einschließlich HTTP, SMTP, FTP, IRC und viele andere) schreiben die Verwendung von ASCII CR+LF ('\r\n', 0x0D 0x0A) auf Protokollebene vor, empfehlen jedoch, dass tolerante Anwendungen auch das einsame LF ('\n', 0x0A) erkennen. Trotz des vorgeschriebenen Standards verwenden viele Anwendungen fälschlicherweise die C-Newline-Escape-Sequenz '\n' (LF) anstelle der korrekten Kombination aus Carriage-Return-Escape- und Newline-Escape-Sequenz '\r\n' (CR+LF) (siehe Abschnitt Newline in Programmiersprachen oben). Diese versehentliche Verwendung der falschen Escape-Sequenzen führt zu Problemen, wenn versucht wird, mit Systemen zu kommunizieren, die sich an die strengere Auslegung der Normen halten, anstatt an die vorgeschlagene tolerante Auslegung. Ein solches intolerantes System ist der Mail-Transfer-Agent qmail, der sich aktiv weigert, Nachrichten von Systemen anzunehmen, die nur LF statt der erforderlichen CR+LF senden.

Das Standard Internet Message Format für E-Mail besagt "CR und LF MÜSSEN nur zusammen als CRLF auftreten; sie MÜSSEN NICHT unabhängig voneinander im Textkörper erscheinen".

Das File Transfer Protocol kann Zeilenumbrüche in Dateien, die zwischen Systemen mit unterschiedlichen Zeilenumbruchdarstellungen übertragen werden, automatisch umwandeln, wenn die Übertragung im "ASCII-Modus" erfolgt. Die Übertragung von Binärdateien in diesem Modus führt jedoch in der Regel zu katastrophalen Ergebnissen: Jedes Auftreten der Zeilenumbruch-Bytefolge - die in diesem Zusammenhang keine Zeilenabschlusssemantik hat, sondern nur Teil einer normalen Bytefolge ist - wird in die vom anderen System verwendete Zeilenumbruch-Darstellung übersetzt, wodurch die Datei effektiv beschädigt wird. FTP-Clients verwenden oft einige Heuristiken (z. B. die Überprüfung der Dateinamenserweiterungen), um automatisch entweder den Binär- oder den ASCII-Modus auszuwählen, aber letztendlich liegt es an den Benutzern, sicherzustellen, dass ihre Dateien im richtigen Modus übertragen werden. Im Zweifelsfall sollte der Binärmodus verwendet werden, da die Dateien dann nicht durch FTP verändert werden, auch wenn sie möglicherweise nicht korrekt angezeigt werden.

Konvertierung zwischen Zeilenumbruchformaten

Texteditoren werden oft für die Konvertierung einer Textdatei zwischen verschiedenen Zeilenumbruchformaten verwendet; die meisten modernen Editoren können Dateien lesen und schreiben, die zumindest die verschiedenen ASCII CR/LF-Konventionen verwenden.

Zum Beispiel kann der Editor Vim eine Datei mit dem Windows-Texteditor Notepad kompatibel machen. Innerhalb von Vim

 :set fileformat=dos
 :wq

Editoren können für die Konvertierung größerer Dateien oder die Massenkonvertierung vieler Dateien ungeeignet sein. Für größere Dateien (unter Windows NT/2000/XP) wird oft der folgende Befehl verwendet:

D:\>TYPE unix_file | FIND /V "" > dos_file

Zu den speziellen Programmen zur Konvertierung von Dateien zwischen verschiedenen Zeilenumbruchkonventionen gehören unix2dos und dos2unix, mac2unix und unix2mac, mac2dos und dos2mac sowie flip. Der Befehl tr ist auf praktisch jedem Unix-ähnlichen System verfügbar und kann verwendet werden, um beliebige Ersetzungsoperationen für einzelne Zeichen durchzuführen. Eine DOS/Windows-Textdatei kann in das Unix-Format konvertiert werden, indem einfach alle ASCII-CR-Zeichen entfernt werden mit

$ tr -d '\r' < inputfile > outputfile

oder, wenn der Text nur CR-Zeilenumbrüche enthält, durch Umwandlung aller CR-Zeilenumbrüche in LF mit

$ tr '\r' '\n' < Eingabedatei > Ausgabedatei 

Die gleichen Aufgaben werden manchmal mit awk, sed oder in Perl ausgeführt, wenn die Plattform über einen Perl-Interpreter verfügt:

$ awk '{sub("$","\r\n"); printf("%s",$0);}' inputfile > outputfile # UNIX zu DOS (Hinzufügen von CRs auf Linux und BSD-basierten Betriebssystemen, die keine GNU-Erweiterungen haben)
$ awk '{gsub("\r",""); print;}' inputfile > outputfile # DOS zu UNIX (Entfernen von CRs auf Linux- und BSD-basierten Betriebssystemen, die keine GNU-Erweiterungen haben)
$ sed -e 's/$/\r/' inputfile > outputfile # UNIX zu DOS (Hinzufügen von CRs auf Linux-basierten Betriebssystemen, die GNU-Erweiterungen verwenden)
$ sed -e 's/\r$//' inputfile > outputfile # DOS zu UNIX (Entfernen von CRs auf Linux-basierten Betriebssystemen, die GNU-Erweiterungen verwenden)
$ perl -pe 's/\r?\n|\r/\r\n/g' inputfile > outputfile # Nach DOS konvertieren
$ perl -pe 's/\r?\n|\r/\n/g' inputfile > outputfile # Nach UNIX konvertieren
$ perl -pe 's/\r?\n|\r/\r/g' inputfile > outputfile # Zu altem Mac konvertieren

Der file-Befehl kann die Art der Zeilenenden erkennen:

 $ file myfile.txt
 meineDatei.txt: Englischer ASCII-Text, mit CRLF-Zeilenabschlüssen

Der Unix-Befehl egrep (erweitertes grep) kann verwendet werden, um Dateinamen von Unix- oder DOS-Dateien auszugeben (wobei nur Dateien im Unix- und DOS-Stil angenommen werden, keine Dateien im klassischen Mac OS-Stil):

$ egrep -L '\r\n' myfile.txt # zeige Datei im UNIX-Stil (LF terminiert)
$ egrep -l '\r\n' myfile.txt # zeigt eine Datei im DOS-Stil an (CRLF-beendet) <span title="Aus: Englische Wikipedia, Abschnitt &quot;Conversion between newline formats&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Newline#Conversion_between_newline_formats <span style="color:#dddddd">ⓘ</span>]</span>

Andere Tools ermöglichen es dem Benutzer, die EOL-Zeichen zu visualisieren:

$ od -a myfile.txt
$ cat -e meineDatei.txt
$ cat -v meineDatei.txt
$ hexdump -c meineDatei.txt <span title="Aus: Englische Wikipedia, Abschnitt &quot;Conversion between newline formats&quot;" class="plainlinks">[https://en.wikipedia.org/wiki/Newline#Conversion_between_newline_formats <span style="color:#dddddd">ⓘ</span>]</span>

Auswertung

Es gibt zwei Möglichkeiten, Zeilenumbrüche zu betrachten, die beide in sich schlüssig sind: Entweder trennen sie Zeilen oder sie beenden Zeilen. Wenn ein Zeilenumbruch als Trennzeichen betrachtet wird, gibt es nach der letzten Zeile einer Datei keinen Zeilenumbruch. Einige Programme haben Probleme bei der Verarbeitung der letzten Zeile einer Datei, wenn diese nicht durch einen Zeilenumbruch abgeschlossen wird. Andererseits interpretieren Programme, die einen Zeilenumbruch als Trennzeichen erwarten, einen abschließenden Zeilenumbruch als Beginn einer neuen (leeren) Zeile. Umgekehrt wird erwartet, dass alle Textzeilen, einschließlich der letzten, durch einen Zeilenumbruch abgeschlossen werden, wenn ein Zeilenumbruch als Trennzeichen betrachtet wird. Wenn die letzte Zeichenfolge in einer Textdatei kein Zeilenumbruch ist, kann die letzte Zeile der Datei als unzulässige oder unvollständige Textzeile betrachtet werden, oder die Datei kann als unzulässig abgeschnitten betrachtet werden.

In Texten, die in erster Linie von Menschen mit Hilfe von Software gelesen werden sollen, die die Funktion des Zeilenumbruchs implementiert, muss ein Zeilenumbruch in der Regel nur dann gespeichert werden, wenn ein Zeilenumbruch erforderlich ist, unabhängig davon, ob das nächste Wort in dieselbe Zeile passen würde, wie z. B. zwischen Absätzen und in vertikalen Listen. Daher wird in der Logik der Textverarbeitung und der meisten Texteditoren der Zeilenumbruch als Absatzumbruch verwendet und als "harter Zeilenumbruch" bezeichnet, im Gegensatz zu "weichen Zeilenumbrüchen", die dynamisch erzeugt werden, um den Zeilenumbruch zu implementieren, und die bei jeder Anzeigeinstanz geändert werden können. In vielen Anwendungen gibt es ein separates Steuerzeichen mit der Bezeichnung "manueller Zeilenumbruch", um Zeilenumbrüche innerhalb eines einzelnen Absatzes zu erzwingen. Die Glyphe für das Steuerzeichen für einen harten Zeilenumbruch ist in der Regel eine Pilzkrähe (¶), und für den manuellen Zeilenumbruch ist in der Regel ein Wagenrücklaufpfeil (↵).

Rückwärtslauf und teilweiser Zeilenvorschub

RI (U+008D REVERSE LINE FEED, ISO/IEC 6429 8D, dezimal 141) wird verwendet, um die Druckposition um eine Zeile nach hinten zu verschieben (durch Rückwärtseinzug des Papiers oder durch Verschieben eines Anzeigecursors um eine Zeile nach oben), damit andere Zeichen über den vorhandenen Text gedruckt werden können. Dies kann geschehen, um sie zu verstärken oder um Unterstreichungen, Durchstreichungen oder andere Zeichen wie diakritische Zeichen hinzuzufügen.

In ähnlicher Weise können PLD (U+008B PARTIAL LINE FORWARD, dezimal 139) und PLU (U+008C PARTIAL LINE BACKWARD, dezimal 140) verwendet werden, um die Druckposition des Textes um einen Bruchteil des vertikalen Zeilenabstands (in der Regel die Hälfte) vor- oder zurückzusetzen. Sie können in Kombination für tiefgestellte Zeichen (durch Vorrücken und anschließendes Umkehren) und hochgestellte Zeichen (durch Umkehren und anschließendes Vorrücken) verwendet werden und können auch für den Druck diakritischer Zeichen nützlich sein.

Allgemeines

Auf einer Schreibmaschine wird der Zeilenumbruch explizit durch Betätigen einer Taste oder eines Hebels durchgeführt. Dabei werden zwei Funktionen ausgeführt:

  • Wagenrücklauf – Positionierung der Schreibstelle zum Zeilenanfang (ganz links).
  • Zeilenvorschub – Positionierung der Schreibstelle um eine Zeile nach unten.

Bei der Einführung der Fernschreiber wurden verschiedene Steuerzeichen (Codierungen elektrischer Signale) eingeführt, um die Zeilenumbruchfunktion einer Schreibmaschine darzustellen. Diese sind dann auch, durch ihre Verwendung als erste Ausgabegeräte der Informatik, von der Fernmeldetechnik in die elektronische Datenverarbeitung übernommen worden.

Reine Textdateien auf dem Computer ähneln in ihrer Darstellung am Bildschirm anfangs einem auf einer Schreibmaschine geschriebenen Text, die Steuerzeichen sind für den Benutzer im Allgemeinen unsichtbar. Mit dem Scrollbalken geht der Zusammenhang zwischen Bildschirmbreite und Zeilenlänge verloren, mit den Proportionalschriften der zwischen Zeichenanzahl und Zeilenlänge. Ausführliche Funktionen haben die Zeichen für den Zeilenumbruch dann erst in der Textauszeichnung (Rich-Text-Format und ähnliches) bekommen.

Weil die Steuerzeichen noch in den Anfangsphasen der Computertechnik spezifiziert wurden, sind sie mit ihrer Funktionsänderung bis heute eine der großen Inkompatibilitäten zwischen verschiedenen Betriebssystem- und Anwendungssoftwaresystemen.

Codierung des Zeilenumbruchs

Kennzeichnung nicht angegebener oder unerwünschter Zeilenumbrüche

Ein typografischer Umbruch, der unterdrückt wird, wird etwa in Poesiezitaten bei Zeilenzitation verwendet:

„Ich saz ûf eime steine / und dahte bein mit beine, / dar ûf satzt ich den ellenbogen; […]“

Walther von der Vogelweide

Damit (Virgel) werden etwa die Reime markiert, deutlichere Absätze wie Strophen kann man dann mit «//» setzen.

Umgekehrt kann es in der elektronischen Textverarbeitung notwendig sein, einen entstehenden Zeilenumbruch als unerwünscht zu markieren. Das entsteht z. B. in Programmiersprachen, in denen der Umbruch ein Steuerzeichen ist, aber etwa auch bei der Angabe von URLs (Webadressen). Hier verwendet man etwa «_» (underline), «\» (backslash), je nachdem, was im jeweiligen Format nicht als Steuerzeichen anderweitig besetzt ist, oder auch das Zeichen wie «↩» (U+21A9). Das Zeichen «↩» ist hier eine printtypografische Anweisung „Umbruch ignorieren“ – bei Copy and paste der Textstelle etwa in die Adresszeile eines Browsers wird der Teil nach dem Zeilenumbruch von manchen Programmen ignoriert, andere fügen den Weblink wieder zusammen, dann müsste das Zeichen «↩» manuell entfernt werden – im rein elektronischen Medium ist das Zeichen eher störend.

Beim Korrekturlesen im Druckwesen verwendet man die Korrekturzeichen «Korrekturzeichen Absatz.svg» für fehlenden und «Korrekturzeichen Absatz anhängen.svg» für unerwünschten Absatz (‚Zeilenumbruch einfügen‘, bzw. ‚Zeilenumbruch entfernen‘, also ‚Absatz anhängen‘):

Text mit Korrekturzeichen ⓘ