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

410
Kyle Piira

Also habe ich zwei Dateien mit jeweils 127.955 Zeilen und 24 zufälligen Zeichen pro Zeile erstellt. In Bezug auf den Text waren die beiden Dateien völlig identisch. Eine Datei hatte jedoch Unix-Zeilenumbrüche und die andere hatte Windows-Zeilenumbrüche. Die Datei mit Unix-Zeilenumbrüchen betrug 3.124 KB, während die Datei mit Windows-Zeilenumbrüchen 3.249 KB war. Es gab keine anderen Unterschiede zwischen den Dateien, daher muss ich davon ausgehen, dass Windows-Zeilenumbrüche aus irgendeinem Grund mehr Speicherplatz beanspruchen. Irgendeine Idee warum?

0
https://en.wikipedia.org/wiki/Newline phuclv vor 7 Jahren 0
[Warum unterschiedliche Zeilenenden - Unix vs. Windows] (http://superuser.com/q/168123/241386) phuclv vor 7 Jahren 2
Oh, die schönen Erinnerungen an den Kampf gegen die Interoperabilität, damit proprietäre Systeme siegen können, die kleinen Endian- und Big Endian-Kriege zwischen Intel und Motorola und das Zeilenende-Elend beim Verschieben von Textdateien zwischen * nix, DOS und Apple ... Und DOS hat sich für eine Schreibmaschine entschieden. Fiasco Labs vor 7 Jahren 0

3 Antworten auf die Frage

4
txtechhelp

Wenn Sie die Textdateien im Hex-Editor geöffnet haben, wäre der Unterschied, den Sie am Ende einer Zeile sehen würden, folgender:

Windows-Zeilenenden: 0x0D 0x0A

Unix-Zeilenenden: 0x0A

Das 0x0Dist der Hexadezimalwert für den Wagenrücklauf (dargestellt textlich einfach als \r).

Das 0x0Aist der Hexadezimalwert für die Zeilenvorschubzeichen (dargestellt textlich einfach als \n).

Wenn Zeilenenden im Windows-EOL-Format vorliegen, enden die Zeilen mit 2 Zeichen \r\n:; während des Unix - Format EOL endet mit 1 Zeichen: \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.

Bevor der Unterschied abgefragt wird, lauten die KB-Konvertierungen tatsächlich 3123.90 für Unix und 3248.86 für Windows. Diese Zahlen runden die Zahlen ab, die der Fragesteller angibt, und nicht die abgeschnittenen Werte, die Sie zitieren. AFH vor 7 Jahren 1
@AFH, danke für den Fang! Ich habe einen binären Rechner (kein Fließkomma) verwendet, als ich die Berechnungen durchführte :) txtechhelp vor 7 Jahren 0
Ich dachte, das wäre wahrscheinlich der Fall. AFH vor 7 Jahren 0
2
David Schwartz

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

0
BRPocock

Was das eigentliche "Warum" -Bit angeht - In der Vergangenheit hat ein Fernschreiber den Druckkopf mit Carriage Return (Hex 0D) zum linken Rand bewegt, gefolgt von einem Zeilenvorschub (Hex 0A) zum Vorschieben des Papiers.

Commodore, Atari und (vor Unix) Apple behielten die Carriage Return als Symbol für das Zeilenende. Unix behielt den Zeilenvorschub; und CP / M / DOS behielten beide.

Viele Internet-Protokolle (z. B. HTTP) werden immer noch in Bezug auf beide definiert (auch als "CRLF" bezeichnet), aber in tatsächlichen Textdateien ist das einzige Programm unter Windows, das mir begegnet ist, das mit "nur" einer Zeile nicht richtig umgehen kann Feed ist Notepad.

Technisch gesehen gibt es den Begriff "Newline", um diesen historischen Unterschied zu verdecken. ZB in C a "\ n" oder in Lisp a # \ Newline wird die von dem lokalen System bevorzugte Schreibweise zugeordnet, verglichen mit "\ r" oder # \ Return, wenn ein bestimmtes Byte-Zeichen speziell gewünscht wird.