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.