Состоит ли возврат каретки Windows \ r \ n из двух или одного символа?

В Windows возврат каретки - \r\n, в то время как в Unix это \n, \r\n обрабатывается ли \r\n как два символа?


person Oh Chin Boon    schedule 10.08.2011    source источник


Ответы (6)


Это два персонажа:

  • \r - возврат каретки;
  • \n - перевод строки.

Сочетание двух символов представляет новую строку в Windows. В то время как в Linux \n представляет новую строку. Он перемещает курсор в начало новой строки в Linux. В Windows курсор останется в том же столбце консоли, но на следующей строке.

\r в Linux имеет тот же эффект, что и в Windows: перемещает курсор в начало строки. Можно напечатать различную информацию в одной строке, где используется \r вместо \n.

person Alexey Ivanov    schedule 10.08.2011
comment
+1. В качестве дополнительной информации для OP: Новая строка. - person informatik01; 15.12.2013

На самом деле \r is 0x0D (^M) and \n is 0x0A (^J), но ..... в windows:

\n will write 0x0D 0x0A

в unix:

\r will write 0x0D
\n will write 0x0A
person Tomas    schedule 10.08.2011
comment
Таким образом, в Windows мы должны явно вывести \ x0A, если мы хотим переместиться на 1 строку вниз, оставаясь в том же столбце? - person Viet; 15.11.2012
comment
Если я прав, это связано с преобразованием символов при открытии файлов в виде текстовых потоков. Если рассматривать stdout как двоичный поток, а не как текстовый поток, \n будет записывать только 0x0A, а не 0x0D 0x0A в Windows. См. Ответ @FredFoo. - person loxaxs; 03.05.2017

Зависит от настройки. \r\n имеет ширину два байта (в ASCII, UTF-8 и т. Д.), Но библиотеки ввода-вывода, такие как stdio библиотека C и другие, при работе в текстовом режиме могут переводить между \n и \r\n квазипрозрачно.

То есть на платформе Windows программа C, читающая поток в текстовом режиме txt_in с

while ((c = getc(txt_in)) != EOF)
    printf("%02x\n", c);

не будет сообщать код ASCII для \r. И наоборот, putc('\n', txt_out) фактически записывает \r\n в поток текстового режима txt_out.

person Fred Foo    schedule 10.08.2011

Windows не различает \r\n и любые другие два символа. Однако есть одна ситуация, когда он обрабатывается как один символ: если вы используете среду выполнения C и открываете файл как текст, \r\n в файле будет прочитан как \n, а \n будет записан в файл как \r\n.

person ymett    schedule 10.08.2011

Да, это два символа: возврат каретки '\ r', за которым следует перевод строки '\ n'.

person Peter Ruderman    schedule 10.08.2011

Я провел несколько тестов (ничего особенного) с Notepad ++ и Sublime Text 2 в Windows, и оказалось, что \r и \n действительно являются двумя разными символами, но ...

Различные текстовые редакторы могут вставлять или не вставлять \r при нажатии клавиши Return.

Попробуйте в текстовом редакторе сделать следующее:

1
2
3
4
5

Затем нажмите Ctrl + F, включите регулярные выражения и выполните поиск \r. В зависимости от вашего текстового редактора и его настроек вы можете «нажимать» или «не нажимать» символ в конце каждой строки. Если приведенный выше текст скопирован из другого редактора, поведение также может отличаться ...

Некоторые текстовые редакторы позволяют изменять настройки в своих настройках, где вы можете указать, предпочитаете ли вы вставлять \r\n или \n в стиле unix, когда вы нажимаете Return. Вдобавок к этому они могут позволить вам выбрать принудительное единый стиль, удалив или вставив символ \r перед сохранением файла.

person Asotos    schedule 23.12.2013
comment
Вы не должны полагаться на текстовый редактор, потому что некоторые из них могут творить чудеса при загрузке файла. Правильный способ проверки - открыть файл в шестнадцатеричном редакторе. - person Telemat; 09.02.2015