用記事本儲存的文件已刪除換行符

用記事本儲存的文件已刪除換行符

一個非常奇怪的情況正在發生:

(運行 Windows 7 企業版、SP1、64 位元)

我在工作中使用的 GUI(專門為此目的構建並旨在在 Windows 環境中運行)生成 .dat 檔案。在使用之前我需要稍微編輯一下。我在普通的舊記事本中打開它,進行編輯並保存它(一切看起來都很好)。當我用任何程式(記事本、記事本++等)重新打開它時,所有“新行”/“輸入”/換行符都已被刪除 - 所有內容似乎都混雜在一起作為一長行。

如果我只是在記事本中打開它並關閉它而不保存,則不會發生任何變化,並且換行符位於應有的位置。在 Notepad++ 或其他程式中開啟文件並儲存不會影響換行符。將內容複製到 Notepad++ 並返回到記事本也可以解決此問題 - 記事本中的後續保存不會增加換行符。

讓這個問題變得更加尷尬的是,這種行為並不適用於我的 GUI 產生的所有 .dat 檔案。只是其中一些。

關於正在發生的事情以及如何解決它有什麼好的想法嗎?

如果這個問題的解決方案是修改我的 GUI 產生檔案的方式,那麼這是一個可以接受的答案,因為我可以為 GUI 提交錯誤報告。

然而......這似乎不太可能,因為我認為我的老闆以前沒有遇到過這個問題,並且他使用相同版本的 GUI 和記事本對文件進行了輕微的修改。我最近也才發生過這種情況,並且不一致:以前有此問題的文件在當前文件迭代中用記事本保存時不會丟失換行符。

編輯:更多資訊:我將文件發送給我的老闆,讓他在電腦上用記事本打開並保存,沒有發生任何有趣的事情 - 保存、關閉和重新打開後,所有換行符仍然存在。要么是發送過程修復了文件中的某些內容,要么是我的計算機出現了一些有趣的問題。

查看已儲存和未儲存檔案的十六進位:據我所知,未儲存的版本在行之間有0D0A,而儲存的版本缺少0D0A 的所有實例,除了最後的一個實例(我想知道這是否是在檔案開啟/轉換時由 Notepad++ 新增)。

再次編輯:編輯掉敏感資訊後「未儲存」檔案的十六進位版本:

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

這是在記事本中儲存並重新開啟後的十六進位代碼:

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

答案1

一些背景可能會有所幫助。記事本需要一個檔案包含兩者,<CR><LF>以便確定它是行結尾並執行換行。如果缺少其中任何一個字符,它將跳過它們並將所有內容顯示在一行上。<CR><LF>是 DOS/Windows 機器上的標準換行符號序列,而 Unix/Linux 及其衍生版本則用作<LF>換行符。您正在開啟的檔案很可能只包含<LF>在其中,因此記事本無法正確顯示它。

這些文件很可能是由不遵循 Windows/DOS 文字格式約定的程式所建立的。如果這只是為了在 Windows 上運行,我認為錯誤報告是適當的,特別是如果文件應該在記事本中編輯的話。

同時,我建議僅在 Notepad++ 中開啟和編輯檔案。

如果您想偵錯問題,請下載十六進位編輯器以查看行尾包含的內容。為了正確的 Windows 格式,它應該包含十六進位代碼 0d 0a。如果其中一個缺失或順序不同,就會產生問題。在從未從記事本保存過的新文件和已保存過的文件上嘗試此操作。

相關內容