Да да, я знаю , что '\n'
пишет перевод строки в UNIX в то время как для Windows , существует последовательность два символа: '\r\n'
. Все это очень хорошо в теории, но мой вопрос почему ? Почему символ возврата каретки является дополнительным в Windows? Если UNIX может это сделать, \n
почему для этого требуется Windows два символа?
Я читаю книгу Дэвида Бизли «Питон», и он говорит:
Например, в Windows при записи символа '\ n' фактически выводится двухсимвольная последовательность '\ r \ n' (а при чтении файла обратно, \ r \ n 'преобразуется обратно в один' \ n ' характер).
Почему дополнительные усилия?
Я буду честен Я давно знал разницу, но никогда не удосужился спросить, ПОЧЕМУ. Я надеюсь, что ответили сегодня.
Спасибо за ваше время.
windows
linux
file-handling
Сукбер
источник
источник
\r\n
. Он также используется большинством текстовых интернет-протоколов (например, SMTP, HTTP и т. Д.) По той же причине, что и Windows (т. Е. История).System.out.printf()
илиString.format()
), убедитесь, что вы используете их в%n
качестве CRLF для совместимости с ОС.\n
не рекомендуется.\n\r
несколько раз. (Я думаю, что это было что-то из NetWare.)Ответы:
Обратная совместимость.
Windows обратно совместима с MS-DOS (даже агрессивно), и MS-DOS использовала соглашение CR-LF, потому что MS-DOS была совместима с CP / M-80 (несколько случайно), который использовал соглашение CR-LF, потому что так вы управляли принтером (потому что принтеры изначально были пишущими машинками с компьютерным управлением).
У принтеров есть отдельная команда для перемещения бумаги на одну строку вверх на новую строку и отдельная команда для возврата каретки (там, где была установлена бумага) обратно на левое поле.
Вот почему. И да, это досадно, но это часть пакета, который позволил MS-DOS победить CP / M, а Windows 95 - всем остальным графическим интерфейсам поверх DOS, а Windows XP - победить. из Windows 98.
(Примечание: современные лазерные принтеры все еще имеют эти команды, потому что они также обратно совместимы с более ранними принтерами - в частности, HP делает это хорошо)
Для тех, кто не знаком с пишущими машинками, вот видео, показывающее, как печатался текст: http://www.youtube.com/watch?v=LJvGiU_UyEQ . Обратите внимание, что сначала бумага перемещается вверх, а затем возвращается каретка, даже если это происходит простым движением. Дин уведомил машинистку, что конец близок, и готовиться к нему.
источник
Насколько я знаю, это восходит к временам пишущих машинок.
\r
это возврат каретки, который перемещается туда, где вы печатаете на странице обратно влево (или вправо, если это ваша культура)\n
это новая линия, которая перемещает вашу бумагу вверх по линии.Выполнение только одной из них на пишущей машинке поставит вас в неверное место, чтобы начать писать новую строку текста.
Когда появились компьютеры, я думаю, что некоторые люди сохранили старую модель, но другие поняли, что в этом нет необходимости, и заключили полный символ новой строки в один символ.
источник
Я не знаю, является ли это общеизвестным, но следует отметить, что CR все еще понимается современными эмуляторами терминала:
Это удобно для индикаторов прогресса, например
источник
Исторически, перевод строки означал, что валик - ролик, на котором вы печатаете, - поворачивал одну строку, в результате чего текст появлялся на следующей строке ... но в следующем столбце.
Возврат каретки означал «вернуть бит, который вы вводите, в начало строки».
Windows использует CR + LF, потому что MS-DOS сделал, потому что CP / M сделал, потому что это имело смысл для последовательных линий.
Unix скопировал свое соглашение \ n, потому что это сделал Multics.
Я подозреваю, что если вы покопаетесь достаточно далеко назад, вы обнаружите политические разногласия между разработчиками!
(Вы пропустили дополнительный забавный бит, в котором используется соглашение Mac (или раньше) просто использовать CR для разделения строк. А теперь в Unicode также есть собственный разделитель строк, U + 2028!)
источник
История символа новой строки (Википедия):
источник
Что это за люди, спрашивающие: «Почему Unix может делать,
\n
а не Windows»? Это такой странный вопрос.\n
и\r\n
хорошо. Они также выводят,\r\n
так что все счастливы. Программа не просто «делает»\n
или\r\n
- она принимает одно, другое или оба, и выводит одно, другое или оба.\n
вместо правильного\r\n
.\n
полностью, зная, что есть некоторые протоколы и программы, которым это не нравится?источник
Причина, по которой соглашения применяются в их различных системах (\ n в системах типа Unix, \ r \ n в Windows и т. Д.), Заключается в том, что, выбрав соглашение, вы НЕ МОЖЕТЕ изменить его, не сломав кучу файлов людей. И это вообще не одобряется.
Системы Unix-типа были разработаны (очень рано) с использованием различных моделей телетайпа, и в какой-то момент кто-то решил, что оборудование должно возвращаться, когда оно выполняло перевод строки.
Windows пришла из DOS, поэтому для Windows действительно возникает вопрос: почему DOS использовал эту последовательность cr / lf? Я предполагаю, что это как-то связано с CP / M, где DOS имеет некоторые корни. Опять же, конкретные модели телетайпа, возможно, сыграли свою роль.
источник
\n
, но продолжает использовать\r\n
сейчас? Если бы они делали это начиная с Windows XP, они могли бы начать сохранять файлы\n
вместо\r\n
.Вот ответ из лучшего источника - Microsoft. Почему терминатор строки CR + LF?
источник