Подтвердить что ты не робот

Почему Windows использует CR LF?

Я понимаю разницу между ними, поэтому не нужно вникать в это, но мне просто интересно, почему рассуждение объясняется тем, почему Windows использует как CR, так и LF для обозначения разрыва строки. Похоже, что метод Linux (только с использованием LF) имеет гораздо больший смысл, экономит место и легче разбирается.

4b9b3361

Ответ 1

Исторически при использовании точечно-матричных принтеров CR возвращал каретку в первую позицию линии, а LF - на следующую строку. Использование CR + LF в самом файле дало возможность отправить файл непосредственно на принтер без какого-либо драйвера принтера.

Ответ 2

Он исходит от телетайп-машин (и пишущих машин) со времен лет.

Раньше было, что, когда вы закончили набирать строку, вам пришлось переместить каретку пишущей машинки (которая держала бумагу и скользнула влево, когда вы набрали) назад к началу строки (CR). Затем вам нужно было продвинуть бумагу по линии (LF), чтобы перейти к следующей строке.

Есть случаи, когда вы, возможно, не захотели возвращать карету при возврате каретки, например, если вы собираетесь зачеркнуть символ с тире (вы просто перезапишите его).

Но в основном это сводится к соглашению. DOS использовала полное соглашение CR/LF, а UNIX немного сократила его. Теперь мы застряли!

Ответ 3

@sshannin отправил URL-адрес из блога Raymond Chen, но он больше не работает. Блог изменил свое внутреннее программное обеспечение, поэтому URL-адреса изменились.

После обхода старых сообщений в новом блоге я нашел здесь здесь.

Цитата из блога:

Почему терминатор линии CR + LF?

Этот протокол восходит к дням телетайпов. Подставки CR для "возврата каретки" - контрольный символ CR вернул печать ( "каретка" ) в колонку 0, не продвигая бумагу. Подставки для LF для "linefeed" - символ управления LF переместил бумагу на одну строку без перемещения печатающей головки. Поэтому, если вы хотите вернуть печать от начала до нулевой колонки (готов к печати следующей строки) и бумаги (поэтому он печатает на новой бумаге), вам нужны как CR, так и LF.

Если вы переходите к различным документам интернет-протокола, таким как RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) или RFC 2616 (HTTP), youll см., что все они определяют CR + LF как последовательность завершения строки. Так реальный вопрос не "Почему CP/M, MS-DOS и Win32 используют CR + LF как терминатор линии?", а скорее "Почему другие люди решили отличаются от этих нормативных документов и используют некоторую другую строку терминатор?"

Unix принял обычный LF как последовательность завершения строки. Если вы посмотрите на параметры stty, вы увидите, что параметр onlcr указывает, LF следует заменить на CR + LF. Если вы ошиблись, получить текст stairstep, где

каждый

     
  
    
      

строка

                 
        
          

начинается

          
      
    
  

где предыдущая строка остановилась. Поэтому даже unix, когда он находится в сыром режиме, требует, чтобы CR + LF заканчивал линии. Неявный CR прежде чем LF является изобретением unix, вероятно, как экономикой, поскольку он экономит один байт на строку.

Unix-родословная языка C переносила это соглашение на C языка, который требует только "\n" (который кодирует LF), чтобы завершать линии, ставя бремя на библиотеки времени выполнения конвертировать необработанные файлы в логические строки.

Язык C также ввел термин "новая строка", чтобы выразить концепция "терминатора общей линии". Я сказал, что ASCII комитет изменил имя символа 0x0A на "новую линию" около 1996 года, поэтому уровень путаницы поднят еще выше.

Вот еще одно обсуждение темы, с точки зрения unix

Я изменил эту вторую ссылку на моментальный снимок в The Wayback Machine, так как фактическая страница больше не доступна.

Надеюсь, это ответит на ваш вопрос.

Ответ 4

Я видел несколько учетных записей, в которых причина отправки двух символов (а иногда и больше) вместо одного была для того, чтобы лучше совместить скорость передачи данных с физической скоростью печати (это было давно). Перемещение печатающей головки заняло больше времени, чем печать одного символа, и отправка дополнительных символов была способом предотвращения передачи данных от устройства печати. Поэтому причина, по которой у нас есть несколько символов для конца строки в Windows, в основном такая же, как и причина, по которой у нас есть клавиатура QWERTY - она предназначена для замедления работы.

Очевидно, причина, по которой эта практика продолжается в Windows по сей день, основана на некотором представлении о постоянной обратной совместимости и, в конечном счете, просто простой инерции.

Следует отметить, что это соглашение не строго соблюдается Windows на уровне операционной системы. Любое приложение Windows может игнорировать соглашение, в зависимости от того, какие другие приложения, с которыми он пытается быть совместимым.

Интересно, что статья статьи Википедии о "Новой линии" утверждает, что Windows 8 может внести изменения в использование только LF. В статье также говорится, что Mac OS X ввела переход от LF + CR к просто LF.

Ответ 5

Из Wikipedia:

Последовательность CR + LF широко использовалась во многих ранних компьютерных системах, в которых использовались телетайп-машины, обычно ASR33, в качестве консольного устройства, поскольку эта последовательность требовалась для размещения этих принтеров в начале новой строки.

Ответ 6

Другие дали ответ, но я хотел добавить... Наверное, вы слишком молоды, чтобы использовать пишущую машинку?;) Каретка - это барабан. Двигая его по горизонтали вправо, возвращает неподвижную головку типа в левое поле страницы. Вращение каретки с помощью пальца и пальца продвигает страницу по одной строке.