2008-09-26 11 views
3

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

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

ответ

3

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

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

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

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

0

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

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

-2

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

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

    return line 
} 

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

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

+0

У ваших функций есть проблемы. Используя его для запуска над строкой для обнаружения новых строк, будет обнаружено два для каждой новой строки Windows. Если вы разделите строки, вы получите пустые строки. – 2008-09-26 05:04:46

+0

Исправлено. Это по-прежнему код psuedo, но идея состоит в том, что он жадно потребляет потенциальные разрывы строк и в этом случае «исправляет» их. Это «исправление» действительно зависит от того, что вы пытаетесь сделать. – SCdF 2008-09-26 05:18:10

1

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

[Source]

1

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

0

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

0

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

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

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

0

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

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

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

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

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

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