Mit Notepad gespeicherte Dokumente haben Zeilenumbrüche gelöscht

374
BunnyKnitter

Eine sehr seltsame Situation tritt auf:

(Unter Windows 7 Enterprise, SP1, 64-Bit)

Eine GUI, die ich bei der Arbeit verwende (speziell für diesen Zweck erstellt und in einer Windows-Umgebung ausgeführt werden soll), generiert DAT-Dateien. Ich muss etwas bearbeiten, bevor ich es benutze. Ich öffne es in einem einfachen alten Notizblock, mache meine Bearbeitung und speichere es ab (alles sieht gut aus). Wenn ich es mit einem beliebigen Programm (Notepad, Notepad ++, etc) erneut löse, wurden alle "neuen Zeilen" / "Eintritte" / Zeilenumbrüche entfernt - alles scheint als eine lange Zeile zusammengefügt zu sein.

Wenn ich es einfach öffne und es ohne Speichern in Notepad schließe, ändert sich nichts und die Zeilenumbrüche sind dort, wo sie sein sollten. Das Öffnen des Dokuments in Notepad ++ oder einem anderen Programm und das Speichern haben keine Auswirkungen auf die Zeilenumbrüche. Das Kopieren des Inhalts nach Notepad ++ und zurück in den Notepad behebt dieses Problem ebenfalls - nachfolgende Sicherungsvorgänge in Notepad bremsen die Linebreaks nicht.

Was dieses Problem noch schwieriger macht, ist, dass dieses Verhalten nicht für ALLE DAT-Dateien gilt, die von meiner GUI erzeugt werden. Nur einige davon.

Gibt es gute Ideen, was passiert und wie man es beheben kann?

Wenn die Lösung darin besteht, die Art und Weise zu ändern, wie meine GUI die Dateien erzeugt, ist dies eine akzeptable Antwort, da die GUI etwas ist, für das ich einen Fehlerbericht einreichen kann.

Es scheint jedoch unwahrscheinlich, da ich glaube, dass mein Chef dieses Problem noch nie hatte und er die gleiche Version der GUI und des Notepad verwendet, um geringfügige Änderungen an den Dateien vorzunehmen. Ich habe dies auch erst kürzlich und uneinheitlich geschehen lassen: Eine Datei, die zuvor dieses Problem hatte, verliert NICHT ihre Zeilenumbrüche, wenn sie mit Notepad in dieser aktuellen Iteration von Dateien gespeichert wird.

Edit: more info: Ich habe die Datei an meinen Chef geschickt und habe ihn mit Notepad auf seinem Computer geöffnet und gespeichert, und es ist nichts Komisches passiert - alle Zeilenumbrüche blieben nach dem Speichern, Schließen und erneutem Öffnen. Entweder hat der Vorgang des Versendens etwas in der Datei behoben oder es ist etwas komisch mit meinem Computer.

Betrachten Sie das Hex der gespeicherten und nicht gespeicherten Dateien: Soweit ich das beurteilen kann, hat die nicht gespeicherte Version 0D0A zwischen den Zeilen und der gespeicherten Version fehlen alle Instanzen von 0D0A, mit Ausnahme einer einzelnen Instanz ganz am Ende (ich frage mich, ob dies der Fall war von Notepad ++ hinzugefügt, da die Datei geöffnet / konvertiert wurde).

Erneut bearbeiten: Die Hex-Version der "nicht gespeicherten" Datei nach dem Bearbeiten der vertraulichen Informationen:

2320504C4541534520434845434B3A20 544845524D5F43617020616E64204465 70436170206265666F72652072756E6E 696E67202121210D0D0A0D0D0A706172 616D20696E697469616C203A3D20313B 0D0D0A706172616D2054203A3D313735 32303B0D0D0A706172616D206474203A 3D20333630303B0D0D0A0D0D0A706172 616D204950505F4F524F203A3D20302E 313233343B0D0D0A706172616D205448 45524D5F4F524F203A3D20302E313233 343B0D0D0A706172616D20544845524D 5F436170203A3D2031323334353B0D0D 0A706172616D20446570436170203A3D 31323334353B0D0D0A234D572C204465 70656E6461626C652043617061636974 79206F662073747566660D0D0A090909 234E756D6265727320666F7220726566 6572656E63653A207468696E67732E0D 0D0A09090923446570656E6461626C65 204361703A2073747566660D0D0A7061 72616D20425546464552203A3D20303B 0D0D0A706172616D20636F6E76657274 203A3D20312E303B0D0D0A0D0D0A7061 72616D09525245534E504F494E545309 3A3D20353B0D0D0A706172616D095252 4553424B50093A3D0D0D0A31092D3132 33343530200D0D0A32092D3132333435 3030200D0D0A330930200D0D0A340931 32333435200D0D0A3509313233343520 0D0D0A3B0D0D0A0D0D0A706172616D09 525245534C4F5045093A3D0D0D0A3109 2D3132333435452D30350D0D0A32092D 3132333435452D30350D0D0A33092D31 32333435452D30350D0D0A3409313233 34350D0D0A3B0D0D0A0D0D0A2357696E 64792073747566660D0D0A706172616D 2057494E445F49433A3D0D0D0A706C61 63650931323334350D0D0A3B0D0D0A0D 0D0A706172616D207468696E67793A3D 0D0D0A706C6163650931323334350D0D 0A3B0D0D0A0D0D0A706172616D204F50 545F5265733A3D0D0D0A7468696E6709 300D0D0A3B0D0D0A0D0A 

Dies ist der Hex-Code nach dem Speichern im Notizblock und dem erneuten Öffnen:

2320504C4541534520434845434B3A20 544845524D5F43617020616E64204465 70436170206265666F72652072756E6E 696E6720212121706172616D20696E69 7469616C203A3D20313B706172616D20 54203A3D31373532303B706172616D20 6474203A3D20333630303B706172616D 204950505F4F524F203A3D20302E3132 33343B706172616D20544845524D5F4F 524F203A3D20302E313233343B706172 616D20544845524D5F436170203A3D20 31323334353B09706172616D20446570 436170203A3D383632362E313B234D57 2C20446570656E6461626C6520436170 6163697479206F662073747566660909 09234E756D6265727320666F72207265 666572656E63653A207468696E677309 090923446570656E6461626C65204361 703A207374756666706172616D204255 46464552203A3D20303B706172616D20 636F6E76657274203A3D20312E303B70 6172616D09525245534E504F494E5453 093A3D20353B706172616D0952524553 424B50093A3D31092D31323334353020 32092D31323334353030203309302034 0931323334352035093132333435203B 706172616D09525245534C4F5045093A 3D31092D3132333435452D303532092D 3132333435452D303533092D31323334 35452D303534092D3132333435452D30 353B2357696E64792073747566667061 72616D2057494E445F49433A3D706C61 63650931323334353B706172616D2074 68696E67793A3D706C61636509313233 34353B706172616D204F50545F526573 3A3D7468696E6709303B0D0A 
0

1 Antwort auf die Frage

1
RayG

Einige Hintergründe können helfen. Notepad erfordert, dass eine Datei beides enthält <CR><LF>, um festzustellen, dass es sich um eine Zeilenende und um einen Zeilenumbruch handelt. Wenn eines dieser Zeichen fehlt, werden diese übersprungen und alles in einer einzigen Zeile angezeigt. <CR><LF>ist die Standardsequenz für Zeilenumbrüche auf DOS / Windows-Computern, während Unix / Linux und Derivate <LF>als Zeilenumbruch verwendet werden. Die Datei, die Sie öffnen, hat höchstwahrscheinlich nur eine Datei, daher kann <LF>sie vom Editor nicht richtig angezeigt werden.

Diese Dateien wurden höchstwahrscheinlich von einem Programm erstellt, das nicht den Windows / DOS-Konventionen für die Textformatierung folgt. Wenn dies nur für die Ausführung unter Windows gedacht ist, denke ich, dass ein Fehlerbericht in Ordnung ist, insbesondere wenn die Dateien in Notepad bearbeitet werden sollen.

In der Zwischenzeit empfehle ich, die Dateien nur in Notepad ++ zu öffnen und zu bearbeiten.

Wenn Sie das Problem debuggen möchten, laden Sie einen Hex-Editor herunter, um zu sehen, was sich am Ende einer Zeile befindet. Für eine korrekte Fensterformatierung sollte es Hex-Codes 0d 0a enthalten. Wenn entweder fehlt oder in einer anderen Reihenfolge, entsteht ein Problem. Versuchen Sie dies mit einer neuen Datei, die noch nie aus dem Notizblock gespeichert wurde und die noch nicht gespeichert wurde.

Windows ist die einzige Plattform, auf der es je lief. Ich habe schlechte Kodierung in Betracht gezogen, aber die Inkonsistenz stört mich. Ich habe vor einigen Wochen denselben Satz von Dateien erstellt, und "File1.dat" hatte dieses Problem. Jetzt habe ich heute mehr Dateien generiert, und "File2.dat" hat dieses Problem, aber "File1.dat" nicht. In dieser Zeit ist keine Aktualisierung meiner GUI erfolgt. Ich benutze denselben Computer. BunnyKnitter vor 7 Jahren 0
Auch wenn es ein Problem mit der Kodierung gibt, zeigt es nicht das Fehlen von Zeilenumbrüchen von Anfang an? Das Öffnen der Datei funktioniert anfangs gut. Das Speichern in Notepad scheint die Zeilenumbrüche durcheinander zu bringen. BunnyKnitter vor 7 Jahren 0
Dem ursprünglichen Beitrag wurden einige Debug-Informationen hinzugefügt RayG vor 7 Jahren 0
Soweit ich das beurteilen kann, hat die ungespeicherte Version 0d 0a zwischen den Zeilen und die gespeicherte Version fehlt sowohl 0d als auch 0a. (Verwenden Sie einen Online-Hex-Editor und fügen Sie meinen Text ein. Ich kann keine zufälligen Programme auf meinem Arbeitscomputer installieren.) BunnyKnitter vor 7 Jahren 0
Ohne die Datei in einem Hex-Editor anzuzeigen, können Sie nicht sicher sein. Die gesamte Datei muss ordnungsgemäß formatiert werden. Wenn auch nur eine Zeile falsch ist, kann der Editor etwas Seltsames tun. Wenn Sie die Datei auf einen anderen Computer bringen können, den Sie im Hex-Format anzeigen können, wäre dies hilfreich. RayG vor 7 Jahren 0
Oh. Notepad ++ kann in Hex konvertiert werden. Erneut geprüft: In der gespeicherten Version fehlen alle Instanzen von "0D0A", mit Ausnahme einer einzelnen Instanz am Ende der Datei. Die ungespeicherte Version hat viele Fälle von 0D0A, die vermutlich jedem Zeilenumbruch entsprechen. BunnyKnitter vor 7 Jahren 0
Wie groß ist die Originaldatei? RayG vor 7 Jahren 0
nur ein paar kb. Es ist eine kleine Textdatei. Ich könnte wahrscheinlich alle sensiblen Daten bearbeiten, aber ... Ich weiß nicht, wie ich sie dann speichern würde, um eine "nicht gespeicherte" Version zu senden. BunnyKnitter vor 7 Jahren 0
@SnyperBunny Wenn der Inhalt der Datei auf einen Bildschirm in der Hex-Ansicht passt, können Sie möglicherweise nur die vertraulichen Informationen bearbeiten und dann einen Screenshot der Hex-Ansicht erstellen, ohne zu speichern. Führen Sie dies für eine frisch erstellte DAT-Datei aus, sodass bekannt ist, dass sie sich von den von Ihnen vorgenommenen Änderungen nicht ändert. RayG vor 7 Jahren 0
Ich fügte den Hex-Code zum Hauptfrage-Post hinzu. BunnyKnitter vor 7 Jahren 0
Dieses Muster kann ein Problem verursachen: 0D0D0A RayG vor 7 Jahren 0
Ich glaube, das 0d0d0a-Muster ist das Problem und Notepad entfernt sie. Zwei '`in einer Reihe macht keinen Sinn, es ist redundant und entspricht nicht dem Windows-Standard. Beachten Sie, dass es ein richtiges `gibt`am Ende nach dem Speichern. Dies ist ein Beweis dafür, dass Notepad den gesamten Originaltext als eine lange Zeile sieht und die Steuerzeichen überspringt und entfernt, wie Sie es in Ihrem ursprünglichen Beitrag beschrieben haben. Sie müssen das Programm, das Text generiert, mit zwei CR in einer Reihe beheben. RayG vor 7 Jahren 1
@SnyperBunny Wenn Sie Zugriff auf den Code haben, suchen Sie nach Zeichenfolgen, die folgendermaßen aussehen: `" Dies ist eine Textzeile \ r "` Der umgekehrte Schrägstrich r ist nicht erforderlich. RayG vor 7 Jahren 0
Ich habe leider keinen Zugriff auf den Code, der die Dateien generiert. Was ich nicht verstehen kann, ist, warum dieses Problem inkonsistent ist. Warum sollte diese Datei diesmal beschädigt werden, während zuvor eine andere Datei beschädigt wurde und "normal" ist dies kein Problem mit generierten Dateien. BunnyKnitter vor 7 Jahren 0
@SnyperBunny Ich kann diese Frage nicht beantworten, ohne den Code zu sehen, der die Dateien generiert. Einige Programme können inkonsistent sein, wenn sie einer Datei Zeilen hinzufügen. Notepad gibt keine schlecht formatierten Zeilen aus, während die anderen Editoren damit umgehen können. Leider habe ich zu diesem Thema nicht alles zu bieten. RayG vor 7 Jahren 0