Warum sind Windows-Zeilenumbrüche größer als Unix-Zeilenumbrüche?

Warum sind Windows-Zeilenumbrüche größer als Unix-Zeilenumbrüche?

Ich habe also zwei Dateien erstellt, jede mit 127.955 Zeilen und 24 zufälligen Zeichen pro Zeile. Was den Text betrifft, waren die beiden Dateien völlig identisch. Allerdings hatte eine Datei Unix-Zeilenumbrüche und die andere Windows-Zeilenumbrüche. Die Datei mit Unix-Zeilenumbrüchen war 3.124 KB groß, während die Datei mit Windows-Zeilenumbrüchen 3.249 KB groß war. Es gab keine weiteren Unterschiede zwischen den Dateien, daher muss ich davon ausgehen, dass Windows-Zeilenumbrüche aus irgendeinem Grund mehr Platz beanspruchen. Irgendeine Idee, warum?

Antwort1

Wenn Sie die Textdateien in einem Hex-Editor öffnen würden, würden Sie am Ende einer Zeile den folgenden Unterschied sehen:

Windows-Zeilenenden:0x0D 0x0A

Unix-Zeilenenden:0x0A

Dies 0x0Dist der Hex-Wert für den Wagenrücklauf (textuell einfach als dargestellt \r).

Dies 0x0Aist der Hex-Wert für das neue Zeilenzeichen (textuell einfach als dargestellt \n).

Wenn die Zeilenenden das Windows EOL-Format haben, enden die Zeilen mit zwei Zeichen: \r\n; während das Unix EOL-Format mit einem Zeichen endet: \n.

Also 127,955 * (24 + 1) == 3,198,875 bytes (3,123.9 KB)für Unix EOL und 127,955 * (24 + 2) == 3,326,830 bytes (3,248.86 KB)für Windows EOL.

Hoffentlich hilft das.

Antwort2

Und was das eigentliche „Warum“ angeht: Historisch gesehen verwendete ein Fernschreiber die Wagenrücklauftaste (Hex 0D), um den Druckkopf an den linken Rand zu bewegen, gefolgt von einem Zeilenvorschub (Hex 0A), um das Papier vorzuschieben.

Commodore, Atari und (vor UNIX) Apple behielten den Wagenrücklauf als Symbol für das Zeilenende, Unix behielt den Zeilenvorschub und CP/M/DOS behielten beide.

Viele Internetprotokolle (z. B. HTTP) werden immer noch in Bezug auf beides definiert (auch bekannt als „CRLF“), aber bei tatsächlichen Textdateien ist Notepad das einzige Programm unter Windows, das mir begegnet ist und das nicht „nur“ mit einem Zeilenvorschub richtig umgehen kann.

Technisch gesehen dient der Begriff „Newline“ nur dazu, diesen historischen Unterschied zu verschleiern. Beispielsweise wird in C ein „\n“ oder in Lisp ein #\Newline der Notation zugeordnet, die das lokale System gerade bevorzugt, im Gegensatz zu „\r“ oder #\Return, wenn ein bestimmtes Byte-Zeichen ausdrücklich gewünscht wird.

Antwort3

Windows verwendet einen Wagenrücklauf, gefolgt von einem Zeilenumbruch. Unix verwendet nur einen Zeilenumbruch. Das ist also ein zusätzliches Byte pro Zeilenumbruch.

verwandte Informationen