Как n и r обрабатываются по-разному в Linux и Windows?

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

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

20
задан fixer1234
20.02.2023 8:39 Количество просмотров материала 3561
Распечатать страницу

3 ответа

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

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

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

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

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

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

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

16
отвечен sleske 2023-02-21 16:27

CR и LF

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

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

в Windows традиционную линию-разделитель в текстовых файлах следует КЛ ЛН

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

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

\n и \r

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

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

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

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

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

действовать до его закрытия в Unix

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

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

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

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

принтеры

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

11
отвечен RedGrittyBrick 2023-02-21 18:44

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

3
отвечен James Billingham 2023-02-21 21:01

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх