Почему "\n" дает новую строку в Windows?

Маркер разрыва строки в Windows должен быть CR+LF, тогда как в Unix это просто LF.

Итак, когда я использую что-то вроде Console.Write("line1\nline2");, почему он работает "правильно" и дает мне две строки? Я ожидаю, что этот \n не сработает, и будет работать только комбо \r\n.

Ответ 1

'\n' - символ перевода строки. Традиционно это заставляло принтер свернуть бумагу на одну строчку вверх. '\r' - это символ возврата каретки, который традиционно заставлял головку принтера перемещаться к дальнему левому краю бумаги.

На принтерах и консолях, которые интерпретируют символы таким образом, вывод line1\nline2 будет

line1
     line2

Многие консоли (и редакторы) будут интерпретировать '\n' как означающее, что вы хотите начать новую строку и поместить курсор в начало этой новой строки. Это то, что вы видите здесь.

Вы должны использовать Environment.NewLine, а не жестко программировать какие-либо конкретные константы.

Ответ 2

Это просто стандартное поведение базовой консоли Windows. Нативное приложение C будет делать то же самое, если вы выводите 0x0A на консоль.

Конечно, вы должны использовать Environment.NewLine для новых строк. Environment.NewLine разрешается в \r\n в Windows и \n в Unix-подобных системах.

Ответ 3

Кодирование файлов!= Console.

Другими словами, хотя для файлов существует "Стандарт Windows" CR + LF, только LF или \n привели к соответствующему возврату каретки и новой интерпретации строк в окнах консоли.

Ответ 4

По моему опыту, когда вы выходите на консоль с помощью WriteLine(), он принимает escape-символ\n. Когда вы используете StreamWriter и вызываете WriteLine(), он заставляет вас вводить \r\n для перехода к новой строке. Я предполагаю, что консоль запрограммирована на прием символа escape\n без возврата каретки\r.

Ответ 5

\n - символ перевода строки. В обеих системах * nix и Windows он должен создать 2 строки. \R - возврат каретки, он перемещает инструмент записи в начало строки.

Большинство современных консолей/редакторов достаточно устойчивы, чтобы интерпретировать \n как\r\n