20

Я думаю, что \n перемещает стрелку вниз, а \r перемещает стрелку к началу строки (выравнивание по левому краю)? Я не уверен, хотя. Так что, если я ошибаюсь, поправьте меня ...

Во всяком случае, мне сказали, что Windows и Linux по-разному обрабатывают newlines и carriage returns . Я хотел бы знать, как они относятся к ним по-разному и в некоторых местах, где важно помнить. Спасибо за ответы.

3 ответа3

18

Я думаю, что \n перемещает стрелку вниз, а \r перемещает стрелку к началу строки (выравнивание по левому краю)? Я не уверен, хотя

Это правда, более или менее, но в основном историческое любопытство. Первоначально, перевод строки (LF) использовался, чтобы продвинуть бумагу одной линией на принтерах и печатных терминалах (телепринтеры); возврат каретки (CR) вернул печатающую головку в начало строки.

Это, вероятно, все еще работает на современных принтерах, когда они используются в "текстовом режиме", но в остальном сегодня мало уместно.

Во всяком случае, мне сказали, что Windows и Linux по-разному обрабатывают переводы строки и возврат каретки.

Разница проста: разработчикам ОС пришлось выбирать, как представлять начало новой строки текста в компьютерных файлах. По различным историческим причинам в мире Unix/Linux в качестве маркера новой строки был выбран один символ LF; MS-DOS выбрал CR+LF, и Windows унаследовала это. Таким образом, разные платформы используют разные соглашения.

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

В некоторых случаях инструменты настаивают на "своем" соглашении о новой строке (например, сценарии оболочки Unix не должны использовать CR+LF), и в этом случае вы должны использовать правильный.

12

CR и LF

В Американском стандартном коде для обмена информацией (ASCII) определены управляющие символы, включая CARRIAGE-RETURN (CR) и LINE-FEED (LF), которые использовались (и остаются) для управления положением печати на принтерах способом, аналогичным механические пишущие машинки, которые предшествовали ранним компьютерным принтерам.

Зависимость от платформы

В Windows традиционным разделителем строк в текстовых файлах является CR, за которым следует LF

В старых (до OSX) системах Apple Macintosh традиционным разделителем строк в текстовых файлах был CR

В Unix и Linux традиционным разделителем строк в текстовых файлах является LF.

\n и \r

Во многих языках программирования и сценариев \n означает "новая строка". Иногда (но не всегда) это означает символ ASCII LINE-FEED (LF), который, как вы говорите, перемещает курсор (или позицию печати) вниз на одну строку. В принтере или пишущей машинке это фактически сдвинет бумагу на одну строку вверх.

\r означает символ возврата в исходное положение ASCII CARRIAGE-RETURN (CR), имя которого на самом деле происходит от механических пишущих машинок, где была клавиша возврата каретки, из-за которой валик ("каретка"), перемещавший бумагу, двигался вправо весна, насколько это возможно. Таким образом устанавливая текущую позицию набора текста на левом поле.

программирование

В некоторых языках программирования \n может означать зависящую от платформы последовательность символов, которые заканчиваются или разделяют строки в текстовом файле. Например, в Perl, print "\n" производит другую последовательность символов в Linux, чем в Windows.

В Java лучше всего, если вы хотите использовать собственные окончания строк для платформы времени выполнения, не использовать \n или \r вообще. Вы должны использовать System.getProperty("line.separator") . Вы должны использовать \n и \r там, где хотите LF и CR, независимо от платформы (например, как используется в HTTP, FTP и других интернет-протоколах связи).

Unix stty

В оболочке Unix команда stty может использоваться для перевода оболочки между этими различными соглашениями. Например, stty -onlcr заставит оболочку впоследствии преобразовать все исходящие LF в CR LF.

Linux и OSX следуют соглашениям Unix

Текстовые файлы

Текстовые файлы по-прежнему чрезвычайно важны и широко используются. Например, HTML и XML являются примерами текстового файла. Большинство важных интернет-протоколов, таких как HTTP, следуют соглашениям о текстовых файлах и включают спецификации для окончаний строк.

Принтеры

Большинство принтеров, кроме самых дешевых, по-прежнему уважают CR и LF. На самом деле они являются основополагающими для наиболее широко используемых языков описания страниц - PCL и Postscript.

3

Короче, был нужен для принтеров, но сейчас ОС делают это немного по-другому. В большинстве случаев можно просто выполнить CR и LF, выполнив \r\n и в большинстве случаев это будет работать нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .