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.
\r\n
это нормально в Windows, но\n\r
это не так, и я помню это, потому что\r\n
это аббревиатура для зарегистрированной медсестры. Я также слышал, что\n
это то, что люди используют в Linux и\r
не используются в одиночку для той же цели, что и\r\n
.\r
используется в действительно старых MacOS. Я не проверял эти факты, хотя.