Вопрос

Обрабатывает ли ваше программное обеспечение символы новой строки из других систем?

Linux/BSD    linefeed         ^J    10     x0A
Windows/IBM  return linefeed  ^M^J  13 10  x0D x0A
old Macs     return           ^M    13     x0D
others?

По причинам безумия я собираюсь использовать версию символа новой строки для Linux в своих текстовых файлах.Но когда я переношу свои текстовые файлы в Windows, некоторые программы плохо работают с символами новой строки в моем тексте.Как бы вы с этим справились?

Это было полезно?

Решение

Как говорится, будьте строги в том, что пишете, и либеральны в том, что читаете.

Ваше приложение должно работать правильно, считывая оба конца строк.Если вы хотите использовать переводы строк и потенциально расстроить пользователей Windows, это нормально.

Но, за исключением Блокнота, большинство программ, с которыми я играю, подходят для обоих методов.

(И я использую Cygwin для Windows, что делает все интересным)

Другие советы

Стандартный дистрибутив Python включает в себя два сценария командной строки (в разделе «Инструменты/скрипты»), называемые crlf.py и lfcr.py, которые могут конвертировать окончания строк между Windows и Unix/Linux.

[Источник]

В .NET новые строки обозначаются Environment.NewLine, поэтому платформа спроектирована таким образом, чтобы использовать любую новую строку системы (CR+LF или только CR или только LF) для использования во время выполнения.Конечно, в конечном итоге это полезно в Mono.

Я подозреваю, что вы обнаружите, что большинство современных программ Windows (за заметным исключением «Блокнота») прекрасно обрабатывают файлы, содержащие только новую строку.Однако файлы, созданные с помощью программ Windows, по-прежнему имеют окончания crlf.

В большинстве случаев окончания строк автоматически обрабатываются библиотекой времени выполнения в зависимости от платформы.Например, программа C, открывающая файл с помощью fopen(..., "r") будет видеть строки единообразно (только перевод строки) на любой платформе независимо от фактического окончания строки.

Насколько я знаю, проблема с разделителями строк есть только в Блокноте.Практически любое другое программное обеспечение в мире принимает любой из этих трех типов разделителей, а также, возможно, и другие.К сожалению, в наши дни «Блокнот» является редактором первой помощи для большинства пользователей компьютеров.Я считаю, что со стороны Microsoft крайне безответственно позволять такой ситуации продолжаться.Я никогда не играл с Vista, но думаю, что проблема все еще существует, как и в XP.Кто-нибудь знает о следующей версии?

Как говорили другие, на случай возникновения необходимости существует множество (довольно тривиальных) преобразователей.Обратите внимание: если вы выполняете передачу по FTP в режиме Ascii, преобразование будет выполнено автоматически...

Действительно, «Блокнот» — самая известная программа, имеющая проблему с окончанием НЧ…

Самое неприятное, что я видел, — это текстовые файлы со смешанным окончанием строк, созданные, по сути, людьми, редактирующими файл Windows в Unix, или утилитами, добавляющими что-то без проверки правильного формата.

Чтобы быть счастливым, просто следуйте рекомендациям стандарта.

http://unicode.org/standard/reports/tr13/tr13-5.html

И предложите варианты для особых случаев, таких как старая MacOS.Или обрабатывайте дела автоматически, если вы можете их надежно обнаружить.

Я рекомендую форматировать текст в стиле Unix.Забудьте о пользователях Windows.Потому что ни один пользователь Windows не использует обычный текст для документов или данных.Они расстроятся, если вы передадите открытый текст.Они всегда ожидают документ Word или Excel.Даже если они используют обычный текстовый файл, единственная проблема, с которой они столкнутся, — это странное отображение текста.

Но пользователи Unix увидят, что все их инструменты будут работать неправильно.Строго следуйте стандарту, особенно для Unix.

ПС.О, если ваш пользователь Windows является разработчиком, просто отформатируйте текст в Unix и скажите ему, что это файл из Unix.

Не знаю, что вы имеете в виду, когда говорите «разобраться», но по сути вы можете просто сказать что-то вроде:

string convertLineBreaks(String line, String lineBreakYouWant) {
  replace all ^M^J or ^M or ^J in line with lineBreakYouWant

  return line
}

Редактировать: Я подозреваю, что после перечитывания вашего вопроса вы имеете в виду, как вы справляетесь с программами других людей, которые не могут обрабатывать неправильные (для целевой системы) разрывы строк.

Я бы предложил либо 1) использовать программу, которая может работать, либо 2) запустить ваши файлы через скрипт, который находит разрывы строк любого типа, а затем преобразует их в любой тип, подходящий для вашей системы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top