Почему Windows использует CR LF?
Я понимаю разницу между этими двумя, поэтому нет необходимости вдаваться в это, но мне просто интересно, какие рассуждения стоят за тем, почему Windows использует как CR, так и LF для обозначения разрыва строки. Похоже, что метод Linux (просто используя LF) имеет гораздо больше смысла, экономит место и легче разбирается.
6 ответов:
исторически при использовании
точечно-матричные принтерытелетайпов CR вернет каретку в первую позицию строки, а LF-в следующую строку. Использование CR+LF в самом файле позволило отправить файл непосредственно на принтер, без какого-либо драйвера принтера.спасибо @zaph указывая, что это были телетайпы, а не матричные принтеры
Это происходит от телетайпных машин (и пишущих машинок) со времен былых.
раньше, когда вы заканчивали печатать строку, вам приходилось перемещать каретку пишущей машинки (которая удерживала бумагу и скользила влево, когда вы печатали) обратно в начало строки (CR). Затем вам нужно было продвинуть бумагу вниз по строке (LF), чтобы перейти к следующей строке.
есть случаи, когда вы, возможно, не хотели, чтобы линия подачи при возврате каретки, например, если вы собираетесь чтобы зачеркнуть символ с тире (вы бы просто перезаписали его).
но в основном, это сводится к Конвенции. DOS использовала полное соглашение CR/LF, и UNIX немного сократил его. Теперь мы застряли!
@sshannin опубликовал URL из блога Раймонда Чена, но он больше не работает. Блог изменил свое внутреннее программное обеспечение, поэтому URL-адреса изменились.
после обхода старых сообщений в новом блоге я нашел его здесь.
цитата из блога:
Почему линия Терминатор CR+LF?
этот протокол восходит ко временам телетайпов. СГ стоит для "возврата каретки – - контроль CR символ вернул печать головка ("каретка") в колонку 0 без выдвижения бумаги. Если стоит для "перевод строки" – НЧ управление персонажем передовой статье одной линии без перемещения печатающей головки. Так что если вы хотите вернуть печать перейдите к нулевому столбцу (готов к печати следующей строки) и выдвиньте бумага (так она печатает на свежей бумаге), вам нужны как CR, так и LF.
Если вы перейдете к различным документам интернет-протокола, таким как RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP), или RFC 2616 (HTTP), вы будете смотрите, чтобы все они указывали CR+LF в качестве последовательности завершения строки. Так реальный вопрос не "почему CP/ M, MS-DOS и Win32 используют CR+LF как Терминатор линии?"но скорее" почему другие люди выбрали отличаются от этих стандартов документы и используют некоторые другие строки Терминатор?"
Unix принял простой LF в качестве последовательности завершения линии. Если вы посмотрите на параметры stty, вы увидите, что параметр onlcr указывает, является ли a LF должен быть изменен на CR+LF. Если вы ошибаетесь в этой настройке, вы получить лестничный текст, где
каждого
строка
начинается
где предыдущая строка остановилась. Так что даже unix, когда он остается в сыром режиме, требуется CR+LF для завершения строк. Неявные пр до того, как LF является изобретением unix, вероятно, как экономика, так как он экономит один байт на строку.
родословная unix языка C перенесла это соглашение в C языковой стандарт, который требует только " \n "(который кодирует LF), чтобы завершите строки, возложив бремя на библиотеки времени выполнения преобразование необработанных данных файла в логические строки.
язык C также ввел термин "новая строка" для выражения этот понятие "универсальный линейный Терминатор". Мне сказали, что ASCII комитет изменил имя символа 0x0A на" newline " около 1996 года, таким образом, уровень путаницы был поднят еще выше.
Я изменил эту вторую ссылку на снимок в машине Wayback, так как фактическая страница больше не доступна.
Я надеюсь, что это отвечает вашим вопрос.
с Википедия:
Я видел несколько учетных записей о том, что причина отправки двух символов (а иногда и больше) вместо одного заключалась в том, чтобы лучше соответствовать скорости передачи данных физической скорости печати (Это было давно). Перемещение печатающей головки занимало больше времени, чем печать одного символа, а отправка дополнительных символов была способом предотвращения передачи данных от опережающего печатающего устройства. Поэтому причина, по которой у нас есть несколько символов конец строки в Windows в основном то же самое, что и причина, по которой у нас есть QWERTY клавиатуры -- он был предназначен, чтобы замедлить вещи вниз.
очевидно, что причина, по которой эта практика продолжается в Windows по сей день, основана на некотором понятии постоянной обратной совместимости и, в конечном счете, просто простой инерции.
отметить, однако, Это соглашение не строго соблюдается Windows на уровне операционной системы. Любое приложение Windows можно игнорировать конвенция, в зависимости от того, с какими другими приложениями она пытается быть совместимой.
интересно, что статья в Википедии о "Newline", утверждает, что Windows 8 может внести изменения в использование только LF. В статье также говорится, что Mac OS X ввел переход от LF+CR к просто LF.
другие дали ответ, но я хотел добавить... Я думаю, вы слишком молоды, чтобы пользоваться пишущей машинкой? ;) Каретка-это барабан. Перемещая его горизонтально вправо, возвращает неподвижную головку типа назад к левому краю страницы. Поворот каретки с помощью пальца и большого пальца продвигает страницу на одну строку(ы).
Comments