Zeilenwechsel
« | 03 Jan 2019 | »Das Speichern von Zeilen ist in der IT und der Programmierung das vermutlich seltsamste Konstrukt, das je umgesetzt wurde.
Hier stimmt nämlich gar nichts. Weder die dafür genutzten ASCII Zeichen, noch die unterschiedliche Implementierung auf den unterschiedlichen Plattformen.
Wenn es um von Menschen lesbaren Text und Textzeilen geht, so ist es doch logisch, dass eine handelsübliche Tastatur der Ausgangspunkt für alles Weitere ist.
Natürlich müssen wir uns noch darauf einigen, dass wir im PC Zeitalter leben, und hier eben ASCII Zeichencodes und IBM-PC kompatible Tastaturen als Referenz herangezogen werden und nicht die alten Heimcomputer wie Atari oder C64 und auch keine der frühen Großrechner.
Die RETURN
Taste,
zu deutsch: “Eingabetaste” - also die große mit dem abgewinkelten Pfeil,
ist den alten Schreibmaschinen
nachempfunden und stellt den Wechsel in die nächste Zeile dar, womit
automatisch auch wieder zur Anfangsposition ganz links für die nächsten
Tastenanschläge gerückt wurde.
Auf diesen alten Geräten gab es dafür einen eigenen “Hebel” auf der linken
Seite, mit dem man die Schreibwalze manuell wieder nach rechts schieben und
gleichzeitig in die nächste Zeile wechseln konnte.
Der Hebel rückte zuerst die Walze per Zahnrad eine Zeile weiter und das
manuelle hinüberziehen schob den “Walzenwagen” nach rechts, womit der nächste
Anschlag wieder links auf dem Blatt erfolgen konnte.
Der übliche BIOS Tastaturcode für diese
RETURN
Taste ist 13
im Dezimalsystem oder 0D
im Hexadezimalsystem.
Programmiersprachen nutzen daher gerne das Kürzel CR
für Carriage Return und
den ASCII Wert 13. C-Sprachen kennen auch den
Escapecode \r
dafür.
Das klassische MacOS war das einzige System, das einen Zeilenwechsel auch mit
genau diesem einen Zeichen (ASCII 13) in Dateien speicherte.
Und eigentlich wäre das wohl auch logisch, dass immer wenn der User auf
RETURN
drückt auch genau dieser Code in der Textdatei landet.
Unix erwählte jedoch ein anderes ASCII Zeichen dafür aus, welches über die
PC-Tastatur nicht abgebildet wird, nämlich “Line-Feed”, kurz LF
mit dem ASCII
Wert 10
bzw. 0A
im Hexadezimalsystem, und C-Sprachen nutzen gerne \n
als Escapecode dafür. Line-Feed steht für Zeilenvorschub.
Drückt der Benutzer auf RETURN
wurde also nicht ein CR
sondern ein LF
in die Datei bzw. den Textpuffer geschrieben.
Und was taten DOS und Windows?
Hier diente offenbar die Schreibmaschine als Vorbild, denn hier landen
beide Zeichen, nämlich zuerst CR
und dann LF
hintereinander in einer
Datei, wenn RETURN
gedrückt wurde.
Ich behaupte, dass auch diese Reihenfolge im Vergleich zur Schreibmaschine falsch ist, denn hier wird zuerst die Zeile gewechselt (LF) und dann der Wagen zurück gezogen (CR)
Schlimm genug, dass Windows und Unix (und damit auch Linux) hier zwei
unterschiedliche binäre Schreibweisen umsetzten, doch das Chaos wird
noch perfekter, wenn unter Windows bei der Nutzung der C-APIs
jedes \n
automatisch in ein CR
+ LF
umgewandelt wird, um mit Unix
Code-kompatibel zu bleiben.
Wenn wir dann “versehentlich” unter Windows den String:
1fputs("Hello World\r\n", file);
speichern, dann steht in der Textdatei binär ein Hello World \r\r\n
,
was eigentlich ein Kodierungsfehler ist.
Man kann das zwar umgehen, in dem man Dateien in C gezielt “binär” öffnet, also z.B.:
1FILE* file = fopen("testfile.txt", "wb"); // write-binary
Doch das wird leicht vergessen.
Wenn man aber glaubt, dass mit dem Unix-Standard LF
die ganze
restliche Welt funktioniert, der scheitert dann wieder bei
Netzwerkprotokollen.
Denn hier ist die gleiche Konvention wie unter Windows mit CR + LF
für das
Ende einer Zeile umgesetzt.
HTTP,
FTP,
SMTP und viele
weitere Protokolle, die textbasiert sind, benötigen beide Zeichen um eine
Befehlszeile abzuschließen.
Das wiederum erfordert von Unix-Systemen, dass sie eine
RETURN
-Eingabe in Programmen wie telnet
auf CR + LF
ausweiten.
Fazit
Also kurz gesagt: Textzeilenwechsel sind in der IT sehr unglücklich
und unterschiedlich entwickelt worden.
Ich verstehe nicht, warum es nicht beim originalen CR
Code alleine
geblieben ist, so wie es MacOS damals auch umgesetzt hatte.
Der Vollständigkeit halber sollten wir noch erwähnen, dass es
dann noch eine zusätzliche Taste gibt, die ENTER
heißt.
Wir finden sie am Zahlenblock einer üblichen Tastatur und obwohl
sie auf allen Betriebssystemen zum gleichen Ergebnis wie RETURN
führt, so hat sie einen anderen Hardware-Scancode und war auf der
originalen Tastatur des IBM-PC meines Wissens nicht verbaut.
Heute sprechen alle von der ENTER
Taste, wenn sie in Wahrheit
RETURN
meinen oder drücken.
Nur wenige Menschen nutzen die echte ENTER
Taste, außer wenn
ausschließlich Zahlen eingetippt und bestätigt werden müssen.
Und wer heute nicht mehr weiß, was eine Schreibmaschine ist (englisch: Typewriter), kann sich mit der Funktion per Video vertraut machen: