Різниця між типами розриву лінії LF, LF та CR?


756

Я хотів би знати різницю (з можливими прикладами) між типами розриву рядків CR LF (Windows), LF (Unix) та CR (Macintosh).


9
Дуже схожий, але не точний дублікат. \nтипово представлений стрічковим каналом, але це не обов'язково, що передається на лінії.
Адріан Маккарті

92
CR і LF є ASCII і керуючі символами Unicode в той час як \rі \nабстракція , яка використовується в деяких мовах програмування. Закриття цього питання переймається принциповими відмінностями між питаннями та продовжує дезінформацію.
Адріан Маккарті

5
@AdrianMcCarthy Це проблема в тому, як закриті голоси певним чином діють як відповіді; відповідь, яка стверджує, що обидва були однаковими, може бути знята, а потім сіра, як дуже, дуже неправильна, але для отримання дуже неправильного результату потрібно лише 4 голоси, що узгоджуються (можна порівняти з рейтингами), не маючи можливості протидіяти голосуванню до наступного це сталося.
Джон Ханна

Таке формулювання питання, безумовно, краще, але це все-таки для всіх практичних цілей те саме питання.
Jukka K. Korpela

6
@ JukkaK.Korpela: Ні, це насправді не так. \nне означає те саме, що у всіх мовах програмування.
Адріан Маккарті

Відповіді:


347

Це дійсно лише про те, які байти зберігаються у файлі. CRє байт-кодом для повернення вагона (з днів машинописів) і LFаналогічно для каналу рядків. Він просто відноситься до байтів, які розміщуються як маркери в кінці рядка.

Більше інформації, як завжди, на Вікіпедії .


52
Я думаю, що також корисно згадати, що CRце характер втечі \rі LFє персонажем втечі \n. Крім того, Вікіпедія: Newline .
Роберт Вунабанді

1
Простими словами CR and LF- це лише кінець рядка та новий рядок за цим посиланням , чи правильно це?
shaijut

@shaijut CR означає Повернення Перевезення. Саме це повернуло вагон на машинках. Отже, здебільшого правильно.
АліФуркан

763

CR і LF - це контрольні символи, відповідно кодовані 0x0D(13 десятків) і 0x0A(10 десяткових знаків).

Вони використовуються для позначення розриву рядка в текстовому файлі. Як ви вказали, Windows використовує два символи послідовності CR LF; Unix використовує лише LF і старий MacOS (до OSX MacIntosh), що використовується CR.

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

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

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


11
тому насправді Windows є єдиною ОС, яка належним чином використовує ці символи, "Carriage Return", а за ними - канал каналів.
Рольф

4
Чи було б точним сказати, що текстовий файл, створений у Windows, є найбільш сумісним із трьох, тобто найбільш ймовірний для відображення у всіх трьох підмножинах ОС?
Прометей,

3
@Hashim це може відображатися належним чином, але спроба запустити текстовий скрипт оболонки з поверненнями перевезення, як правило, призведе до помилки
Omer

Простими словами CR and LF- це лише кінець рядка та новий рядок за цим посиланням , чи правильно це?
shaijut

Я виявив, що деякі файли у стилі Windows ( CR+LF) можуть відображатися з подвійними рядками в інших системах. Імовірно, редактор, який відображає текст, підтримує повернення перевезення та подачу рядків як роздільники нового рядка, і як такий може створювати 2 рядки, де призначено 1. Тож, хоча це CR+LFможе бути найбільш сумісним, я не думаю, що це без проблем.
Магнус Бик

458

Це хороший підсумок, який я знайшов:

Символ повернення каретки (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 та інші.

Джерело


1
Характер "вертикальної вкладки" переміщує курсор вниз і зберігає позицію в рядку, а не LF-символ. LF - це EOL.
12431234123412341234123

2
@TaylorLeese Чи / r / n та / n / r однакові?
Vicrobot

175

Оскільки відповіді, що вказує саме це, немає, коротко підсумовано:

Повернення каретки (MAC до OSX)

  • CR
  • \ r
  • Код ASCII 13

Потік рядків (Linux, MAC OSX)

  • НЧ
  • \ n
  • Код ASCII 10

Повернення каретки та канал каналів (Windows)

  • CRLF
  • \ r \ n
  • ASCII код 13, а потім ASCII код 10

Якщо ви бачите код ASCII у дивному форматі, вони є лише цифрами 13 та 10 у різному радіасі / базовій частині, як правило, основа 8 (восьмигранна) або основа 16 (шістнадцяткова).

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


46

Джефф Етвуд опублікував нещодавню публікацію в блозі з цього приводу: Велика схизма нового рядка

Ось суть з Вікіпедії :

Послідовність CR + LF була загальноприйнятою для багатьох ранніх комп'ютерних систем, які застосовували телетипні машини, як правило, ASR33, як консольний пристрій, оскільки ця послідовність була потрібна для розташування цих принтерів на початку нового рядка. У цих системах текст часто був звичайно складений, щоб бути сумісним із цими принтерами, оскільки концепція драйверів пристроїв, що приховували такі деталі обладнання, не була ще добре розроблена; програми повинні були безпосередньо спілкуватися з телевізійною машиною та дотримуватися її домовленостей.Розмежування двох функцій приховувало той факт, що друкована головка не могла повернутися з крайнього правого краю на початок наступного рядка за один символ. Ось чому послідовність завжди надсилалася спочатку з CR. Насправді, часто доводилося надсилати зайві символи (сторонні CR або NUL, які ігноруються), щоб дати друкованій головці час перейти до лівого поля. Навіть після того, як телетайпи були замінені комп'ютерними терміналами з більш високою швидкістю передачі даних, багато операційних систем все ще підтримували автоматичне надсилання цих символів заповнення, для сумісності з більш дешевими терміналами, які потребували декількох символьних разів для прокрутки дисплея.


5
+1 Саме таким простим розумінням я завжди пам’ятаю, в якому порядку виходить поєднання. Навіть сьогодні ми можемо бачити цю механічну логіку на будь-якому струменевому принтері (я люблю це розуміти, оскільки ненавиджу вчитися). Мої інші хитрощі пам'яті: "mac? Повернення до відправника" та "NewLineFeed" (пам'ятати, що NL === LF та пам'ятати \ n, оскільки у CR вже є R у його абревіатурі)
GitaarLAB,

3
"Я сумнівний ... два контрольні коди були потрібні для встановлення часу". Це не те, що говорить. Там сказано, що додаткові CR та NUL є тут, щоб дати час, щоб він повернувся, а не оригінальний CR LF.
Жульєн Руссо

11
@Adrian Ви візьмете персональний досвід? 1) У мої старі телететичні дні потрібен був принтер, <CR><CR><LF>тому я, звичайно, експериментував лише з одним <CR>. Я послав <CR><LF>Aпісля довгої лінії, і ви могли чутиA друкуються до каретки повністю повертається.
Джон Бергер

11
@ Адріан 2) Не забувайте, це було в електромеханічну епоху, коли кожен персонаж виконував саме одну функцію. Ми часто підкреслювали слово, друкуючи рядок, потім надсилаючи <CR><CR>та набираючи правильну кількість пробілів, потім повторно друкували те саме слово: примітивна форма жирного шрифту.
Джон Бергер

3
@Adrian 3) І, нарешті, для цього використовувався Бодо (або код Мюррея), а не ASCII. П'ять бітів даних, між одним початковим бітом і половиною стоп-бітів. Як ти можеш потроху? Зачекавши півтори часу, перш ніж почати надсилати наступний символ, щоб дати часу друку голові повернутися до центру.
Джон Бергер

16

CR - код ASCII 13

LF - ASCII код 10.

Теоретично CR повертає курсор у першу позицію (зліва). LF подає один рядок, рухаючи курсор на один рядок вниз. Ось як у старі часи ви керували принтерами та моніторами в текстовому режимі. Ці символи зазвичай використовуються для позначення кінців рядків у текстових файлах. У різних операційних системах використовували різні умови. Як ви зазначали, Windows використовує комбінацію CR / LF, тоді як до ОС OSX Macs використовують лише CR тощо.


7

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

Ось деталі .


5

Сумний стан "роздільників записів" або "лінійних термінаторів" - це спадщина темних віків обчислень.

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

Але колись це було не зовсім так. Додатки мають вбудовані символи управління та обробку, що залежить від пристрою. Мозкові системи, які потребували і CR, і LF, просто не мали абстракції для розділювачів записів або лінійних термінаторів. CR був необхідний для того, щоб телевізійний або відеодисплей повернувся до першого стовпця, а LF (сьогодні, NL, той самий код) був необхідний, щоб перейти до наступного рядка. Я здогадуюсь, ідея зробити щось інше, ніж скинути необроблені дані на пристрій, була надто складною.

Unix і Mac фактично вказали абстракцію для кінця рядка, уявіть це. На жаль, вони вказали різні. (Unix, ах, прийшов першим.) І, природно, вони використовували контрольний код, який вже був "близький" до SOP

Оскільки майже все наше операційне програмне забезпечення сьогодні є нащадком Unix, Mac або MS, що працюють з SW, ми застрягли в лінії, що закінчується плутаниною.


1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.