В документе, сохраненном с помощью блокнота, удалены разрывы строк

283
BunnyKnitter

Происходит очень странная ситуация:

(Работает под управлением Windows 7 Enterprise, SP1, 64bit)

Графический интерфейс, который я использую на работе (создан специально для этой цели и предназначен для работы в среде Windows), создает файлы .dat. Мне нужно немного отредактировать один, прежде чем я его использую. Я открываю его в простом старом блокноте, редактирую и сохраняю (все выглядит хорошо). Когда я снова открываю его с какой-либо программой (Notepad, Notepad ++ и т. Д.), Все «новые строки» / «вводы» / разрывы строк удаляются - все кажется перемешанным в одну длинную строку.

Если я просто открою его и закрою в блокноте без сохранения, ничего не изменится, и разрывы строк окажутся там, где они должны быть. Открытие документа в Notepad ++ или другой программе и сохранение его не влияет на разрывы строк. Копирование содержимого в Notepad ++ и обратно в Блокнот также устраняет эту проблему - последующее сохранение в Блокноте не разрушает разрывы строк.

Что делает эту проблему еще более неловкой, так это то, что это поведение не относится ко ВСЕМ файлам .dat, которые создает мой графический интерфейс. Просто некоторые из них.

Есть хорошие идеи о том, что происходит и как это исправить?

Если решение этой проблемы состоит в том, чтобы изменить способ, которым мой 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 
0

1 ответ на вопрос

1
RayG

Некоторый фон мог бы помочь. Блокнот требует, чтобы файл содержал оба <CR><LF>, чтобы определить, что это конец строки и выполнить разрыв строки. Если какой-либо из этих символов отсутствует, он пропустит их и отобразит все в одной строке. <CR><LF>является стандартной последовательностью разрыва строки на компьютерах с DOS / Windows, тогда как Unix / Linux и ее производные используют в <LF>качестве разрыва строки. Скорее всего, файл, который вы открываете, находится только <LF>в нем, поэтому блокнот не может отобразить его правильно.

Скорее всего, эти файлы были созданы программой, которая не соответствует соглашениям Windows / DOS для форматирования текста. Если это предназначено только для запуска в Windows, я думаю, что отчет об ошибках в порядке, особенно если файлы должны редактироваться в блокноте.

А пока я рекомендую открывать и редактировать файлы только в Notepad ++.

Если вы хотите отладить проблему, загрузите шестнадцатеричный редактор, чтобы увидеть, что содержится в конце строки. Для правильного форматирования окон он должен содержать шестнадцатеричные коды 0d 0a. Если или отсутствует, или в другом порядке, это создаст проблему. Попробуйте это для нового файла, который никогда не был сохранен из блокнота и который есть.

Windows - единственная платформа, на которой она когда-либо работала. Я считал плохое кодирование, но меня беспокоит несоответствие. Я сгенерировал тот же набор файлов несколько недель назад, и у «File1.dat» была эта проблема. Теперь я сгенерировал больше файлов сегодня, и «File2.dat» имеет эту проблему, а «File1.dat» нет. В это время не произошло никаких обновлений в моем графическом интерфейсе. Я использую тот же компьютер. BunnyKnitter 7 лет назад 0
Кроме того, если есть проблема с кодировкой, не будет ли это показывать отсутствие разрывов строк с самого начала? Первоначально открытие файла работает нормально, его сохранение в блокноте приводит к путанице. BunnyKnitter 7 лет назад 0
Добавил некоторую отладочную информацию в исходное сообщение RayG 7 лет назад 0
Насколько я могу судить, несохраненная версия имеет 0d 0a между строками, а в сохраненной версии отсутствуют и 0d, и 0a. (используя некоторый онлайн-редактор hex и вставив мой текст - не могу установить случайные программы на мою рабочую композицию.) BunnyKnitter 7 лет назад 0
Без фактического просмотра файла в шестнадцатеричном редакторе вы не можете быть уверены. Весь файл должен быть правильно отформатирован, если хотя бы одна строка неверна, блокнот может сделать что-то странное. Если вы можете получить файл на другой компьютер, который вы можете просмотреть в шестнадцатеричном формате, то это поможет. RayG 7 лет назад 0
Ой. Блокнот ++ можно конвертировать в шестнадцатеричный формат. Повторная проверка: в сохраненной версии отсутствуют все экземпляры «0D0A», кроме одного экземпляра в самом конце файла. Несохраненная версия имеет много экземпляров 0D0A, предположительно соответствующих каждому переносу строки. BunnyKnitter 7 лет назад 0
Насколько большой оригинальный файл? RayG 7 лет назад 0
всего несколько кб. это небольшой текстовый файл. Я мог бы, вероятно, отредактировать всю конфиденциальную информацию, но ... я не знаю, как я мог бы сохранить ее для отправки "несохраненной" версии. BunnyKnitter 7 лет назад 0
@SnyperBunny Если содержимое файла помещается на одном экране в шестнадцатеричном виде, возможно, вы можете просто отредактировать конфиденциальную информацию, а затем сделать снимок экрана шестнадцатеричного представления без сохранения. Сделайте это на только что созданном файле .dat, чтобы он не изменился, кроме изменений, которые вы сделали. RayG 7 лет назад 0
Я добавил шестнадцатеричный код в основной пост с вопросом. BunnyKnitter 7 лет назад 0
Этот шаблон может вызывать проблему: 0D0D0A RayG 7 лет назад 0
Я считаю, что паттерн 0d0d0a - это проблема, и Блокнот их убирает. Два ``подряд не имеет смысла, он избыточен и не соответствует стандарту Windows. Обратите внимание, что есть правильное`в конце после сохранения, что является доказательством того, что Блокнот воспринимает весь исходный текст как одну длинную строку, пропуская и удаляя управляющие символы, как вы описали в исходном посте. Вам нужно исправить программу, которая генерирует текст с двумя CR подряд. RayG 7 лет назад 1
@SnyperBunny Если у вас есть доступ к коду, ищите строки, которые выглядят следующим образом: `" Это строка текста \ r "` Обратная косая черта r не понадобится. RayG 7 лет назад 0
У меня нет доступа к коду, который генерирует файлы, к сожалению. Чего я не могу понять, так это того, почему эта проблема будет противоречивой. Почему этот файл был сломан на этот раз, когда другой файл был сломан ранее, и когда «нормально», это не проблема с ЛЮБЫМИ файлами. BunnyKnitter 7 лет назад 0
@SnyperBunny Я не могу ответить на этот вопрос, не увидев код, который генерирует файлы. Некоторые программы могут быть несовместимы в том, как они добавляют строки в файл. Блокнот не прощает плохо отформатированных строк, в то время как другие редакторы могут справиться с этим. К сожалению, это все, что я могу предложить по этой теме. RayG 7 лет назад 0