символы новой строки - PullRequest
       11

символы новой строки

3 голосов
/ 26 сентября 2008

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

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, некоторые программы не очень хорошо играют с символами новой строки в моем тексте. Как бы вы справились с этим?

Ответы [ 8 ]

3 голосов
/ 26 сентября 2008

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

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

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

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

1 голос
/ 26 сентября 2008

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

1 голос
/ 26 сентября 2008

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

[Источник]

0 голосов
/ 01 января 2012

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

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

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

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

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

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

0 голосов
/ 26 сентября 2008

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

Действительно, Notepad - самая выдающаяся программа, имеющая проблему с окончанием LF ...

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

0 голосов
/ 26 сентября 2008

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

0 голосов
/ 26 сентября 2008

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

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

  return line
}

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

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

0 голосов
/ 26 сентября 2008

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

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

...