Разница между типами разрывов строк CR LF, LF и CR? - PullRequest
612 голосов
/ 12 октября 2009

Я хотел бы знать разницу (с примерами, если это возможно) между типами разрывов строк CR LF (Windows), LF (Unix) и CR (Macintosh).

Ответы [ 9 ]

643 голосов
/ 12 октября 2009

CR и LF - управляющие символы, соответственно кодированные 0x0D (13 десятичных знаков) и 0x0A (10 десятичных знаков).

Они используются для пометки разрыва строки в текстовом файле. Как вы указали, Windows использует два символа последовательности CR LF; Unix использует только LF, а старый MacOS (до Mac OS Mac OS X) использовал CR.

Апокрифическая историческая перспектива:

Как указано Питером , CR = Возврат каретки и LF = Перевод строки , два выражения имеют свои корни в старых пишущих машинках / TTY. LF переместил бумагу вверх (но оставил горизонтальное положение идентичным), а CR вернул «каретку» так, чтобы следующий набранный символ находился в крайнем левом положении на бумаге (но на той же строке). CR + LF делал и то, и другое, то есть готовился набрать новую строку. По прошествии времени физическая семантика кодов оказалась неприменимой, а память и пространство на гибких дисках были очень важны, некоторые разработчики ОС решили использовать только один из символов, они просто не очень хорошо общались друг с другом; -)

Большинство современных текстовых редакторов и текстовых приложений предлагают опции / настройки и т. Д., Которые позволяют автоматически определять соглашение о конце строки в файле и отображать его соответствующим образом.

413 голосов
/ 12 октября 2009

Это хорошее резюме, которое я нашел:

Символ возврата каретки (CR) (0x0D, \r) перемещает курсор в начало строки без перехода на следующую строку. Этот символ используется как символ новой строки в операционных системах Commodore и Early Macintosh (OS-9 и более ранних версий).

Символ перевода строки (LF) (0x0A, \n) перемещает курсор вниз на следующую строку, не возвращаясь к началу строки. Этот символ используется как символ новой строки в системах на основе UNIX (Linux, Mac OSX и т. Д.)

Последовательность конца строки (EOL) (0x0D 0x0A, \r\n) - это фактически два символа ASCII, комбинация символов CR и LF. Он перемещает курсор вниз на следующую строку и в начало этой строки. Этот символ используется как символ новой строки в большинстве других не-Unix операционных систем, включая Microsoft Windows, Symbian OS и другие.

Источник

283 голосов
/ 12 октября 2009

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

Путь больше информации, как всегда, в Википедии .

144 голосов
/ 01 сентября 2016

Поскольку ответа на этот вопрос нет, кратко резюмируем:

Возврат каретки (MAC pre-OSX)

  • CR
  • \ г
  • ASCII код 13

Перевод строки (Linux, MAC OSX)

  • LF
  • \ n
  • ASCII код 10

Возврат каретки и перевод строки (Windows)

  • CRLF
  • \ г \ п
  • ASCII код 13 и затем ASCII код 10

Если вы видите код ASCII в странном формате, это просто числа 13 и 10 в другом основании / основании, обычно это основание 8 (восьмеричное) или основание 16 (шестнадцатеричное).

http://www.bluesock.org/~willg/dev/ascii.html

41 голосов
/ 20 января 2010

У Джеффа Этвуда есть недавняя запись в блоге об этом: Великий раскол Новой Линии

Вот сущность из Википедии :

Последовательность CR + LF находилась в общем использовании на многих ранних компьютерных системах, которые принял телетайп машины, как правило, ASR33, в качестве консоли устройство, потому что эта последовательность была необходимо расположить эти принтеры в начало новой строки. На этих системы, текст часто был обычно составлен, чтобы быть совместимым с этими принтеры, так как концепция устройства драйверы скрывают такие детали оборудования из приложения еще не было хорошо разработаны; приложения должны были говорить непосредственно к телетайпу и следовать его соглашениям. Разделение из двух функций скрыли Дело в том, что печатающая головка не могла вернуться из крайнего права к начало следующей строки в односимвольное время Вот почему последовательность всегда отправлялась с CR первый. На самом деле это часто было необходимо отправить лишние символы (посторонние CR или NULs, которые игнорируются) дать печатающей головке время для перехода к левое поле. Даже после телетайпа были заменены компьютерные терминалы с более высокой скоростью передачи данных, многие работают системы по-прежнему поддерживаются автоматически отправка этих символов заполнения, для совместимость с более дешевыми терминалами требуется несколько раз прокрутить дисплей.

16 голосов
/ 12 октября 2009

CR - ASCII код 13

LF - код ASCII 10.

Теоретически CR возвращает курсор в первую позицию (слева). LF подает одну строку, перемещая курсор на одну строку вниз. Вот как в старые времена вы управляли принтерами и мониторами в текстовом режиме. Эти символы обычно используются для обозначения конца строк в текстовых файлах. Различные операционные системы использовали разные соглашения. Как вы указали, в Windows используется комбинация CR / LF, в то время как на Mac с пред-OSX используется только CR и т.

7 голосов
/ 12 октября 2009

Системы, основанные на ASCII или совместимый набор символов использовать либо LF (Перевод строки, 0x0A, 10 в десятичном виде) или CR (возврат каретки, 0x0D, 13 в десятичном виде) индивидуально или ЧР с последующим LF (CR + LF, 0x0D 0x0A); Эти символы основаны на командах принтера: перевод строки указал, что одна строка бумага должна выходить из принтера, а каретка возвращается указано, что принтер каретка должна вернуться к началу текущей строки.

Вот подробности .

5 голосов
/ 12 октября 2009

Печальное состояние «разделителей записей» или «ограничителей строк» ​​является наследием мрачных веков вычислений.

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

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

Unix и Mac фактически указали абстракцию для конца строки, представьте это. К сожалению, они указали разные. (Unix, хм, пришел первым.) И, естественно, они использовали управляющий код, который уже был «близок» к S.O.P.

Поскольку почти все наше операционное программное обеспечение на сегодняшний день является потомком операционной системы Unix, Mac или MS, мы застряли в неразберихе с окончанием строки.

1 голос
/ 16 июня 2017

NL, полученное из EBCDIC NL = x'15 ', которое логически сравнивается с CRLF x'odoa ascii ... это становится очевидным при физическом перемещении данных с мэйнфреймов в средние частоты. В разговорной речи (поскольку только тайные люди используют ebcdic) NL был приравнен либо к CR, либо к LF, либо к CRLF

.
...