9 ответов:
Это действительно только о том, какие байты хранятся в файле.
CR- это байт-код для возврата каретки (со времен пишущих машинок) иLFаналогично, для линии подачи. Это просто относится к байтам, которые помещаются в качестве маркеров конца строки.больше информации, как всегда, на Википедия.
CR и LF являются управляющими символами, соответственно закодированными
0x0D(13 десятичное) и0x0A(10 десятичное).Они используются для обозначения разрыва строки в текстовом файле. Как вы указали, Windows использует два символа последовательности CR LF; Unix использует только LF, а старый MacOS ( до OSX MacIntosh) использовал CR.
апокрифическая историческая перспектива:
как отметил Петр, CR = Возврат Каретки и LF = Строки, два выражения имеют свои корни в старых пишущих машинках / TTY. LF переместил бумагу вверх (но сохранил горизонтальное положение идентичным), а CR вернул "каретку" так, чтобы следующий введенный символ был в крайнем левом положении на бумаге (но на той же строке). Пр+ЛФ делала обе, т. е. готовится ввести новую строку. С течением времени физическая семантика кодов была неприменима, а поскольку память и дисковое пространство были в большом почете, некоторые ОС дизайнеры решили использовать только одного из персонажей, они просто не очень хорошо общались друг с другом ;-)
большинство современных текстовых редакторов и текстовых приложений предлагают опции / настройки и т. д. это позволяет автоматически обнаруживать соглашение о конце строки файла и отображать его соответствующим образом.
это хорошее резюме я нашел:
символ возврата каретки (CR) (
0x0D,\r) перемещает курсор в начало строки, не перейти к следующей строке. Этот символ используется в качестве нового символа строки в Commodore и ранних операционных системах Macintosh (OS-9 и более ранних).символ подачи строки (LF) (
0x0A,\n) перемещает курсор к следующей строке, не возвращаясь к началу линии. Этот символ используется в качестве новый символ строки в системах на базе UNIX (Linux, Mac OSX и т. д.)конец строки (EOL) последовательности (
0x0D 0x0A,\r\n) на самом деле два символа ASCII, комбинация символов CR и LF. Он перемещает курсор как вниз к следующей строке, так и в начало этой строки. Этот символ используется в качестве нового символа строки в большинстве других операционных систем, отличных от Unix, включая Microsoft Windows, Symbian OS и другие.
Так как нет ответа, заявляющего только это, кратко резюмировал:
Возврат Каретки (Mac pre-OSX)
- CR
- \r
- ASCII код 13
Строки (Linux, MAC OSX)
- LF
- \n
- код ASCII 10
возврат каретки и подача строки (Windows)
- CRLF
- \r\n
- ASCII код 13, а затем ASCII код 10
Если вы видите код ASCII в странном формате, это просто число 13 и 10 в другом корне/основании, обычно основание 8 (восьмеричное) или основание 16 (шестнадцатеричное).
Джефф Этвуд недавно написал об этом в блоге:Великий Раскол Новой Строки
вот суть от Википедия:
последовательность CR+LF была в общем использовании на многих ранних компьютерных системах были приняты телетайпные машины, обычно ASR33, как консоль устройства, потому что эта последовательность была требуется для размещения этих принтеров на начало новой линии. На этом системы, текст был часто рутинно состоящий чтобы быть совместимым с ними принтеры, так как понятие устройства драйверы скрывают такие детали оборудования от приложения еще не было толку разработано; приложения должны были говорить сразу к машине телетайпа и следуйте его условностям. разделение из двух функций скрывали дело в том, что печатающая головка не могла возвращение из крайних правых в начало следующей строки в один-символ времени. Вот почему последовательность всегда отправлялась с CR первый. На самом деле, это часто необходимо чтобы отправить дополнительные символы (посторонние CRs или NULs, которые игнорируются) к дайте печатающей головке время для перемещения левое поле. даже после телетайпов были заменены компьютерные терминалы с более высокими скоростями передачи в бодах, много работая системы по-прежнему поддерживаются автоматически отправка этих символов заполнения, для совместимость с более дешевыми терминалами для этого требуется несколько символов раз для прокрутки дисплея.
CR-ASCII код 13
LF - ASCII код 10.
теоретически CR возвращает курсор в первую позицию (слева). Если для одной строки перемещение курсора на одну строку вниз. Именно так в старые времена вы управляли принтерами и текстовыми мониторами. Эти символы обычно используются для обозначения конца строк в текстовых файлах. В разных операционных системах используются разные соглашения. Как вы указали, Windows использует комбинацию CR/LF, в то время как pre-OSX Mac используют только CR и так далее.
системы на основе ASCII или a совместимый набор символов, использовать если (Линия подачи, 0x0A, 10 в десятичном формате) или CR (возврат каретки, 0x0D, 13 в десятичном формате) индивидуально, или CR следовать LF (CR+LF, 0x0D 0x0A); Эти символы основаны на командах принтера: подача строки указано, что одна строка бумага должна подаваться из принтера, а каретка возвращаться указано, что принтер каретка должна вернуться в начало текущего линия.
здесь подробности.
печальное состояние " разделителей записей "или" Терминаторов линий " является наследием темных веков вычислений.
но когда-то это было не совсем так. Применения встроенные характеры управления и прибор-специфическая обработка. Мозг-мертвые системы, которые требовали и CR, и LF просто не имели абстракции для разделителей записей или линейных Терминаторов. CR был необходим для того, чтобы телетайп или видеодисплей вернулись в первый столбец, а LF (сегодня, NL, тот же код) был необходим, чтобы заставить его перейти к следующей строке. Я думаю, идея сделать что-то другое, чем сброс необработанных данных на устройство, была слишком сложной.
Unix и Mac фактически указали абстрагирование для конца строки, представьте, что. К сожалению, они указали разные. (Unix, кхм, пришел первым.) И, естественно, они использовали контрольный код, который уже был "близок" к S. O. P.
поскольку почти все наше операционное программное обеспечение сегодня является потомком Unix, Mac или MS operating SW, мы застряли с путаницей в конце строки.
NL, полученный из EBCDIC NL = x '15', который логически сравнивался бы с crlf x'odoa ascii... это становится очевидным при физическом перемещении данных с мэйнфреймов на средний уровень. Coloquially (как только тайные люди используют кодировку ebcdic) НЛ была приравнена с CR или LF или возврата каретки и перевода строки
Comments