Напоминание - \ r \ n или \ n \ r?

334

Я просто не могу их запомнить. Итак, каков правильный способ правильного завершения старомодных линий ASCII?

  • 11
    Если вы делаете это, убедитесь, что вы открываете свои файлы в двоичном режиме . В противном случае стандартные файловые потоки C / C ++ преобразуют "\ n" (для текстовых файлов (по умолчанию)) в последовательность конца строки (ELS) для конкретной платформы. Таким образом, "\ r \ n" в Windows преобразуется в "\ r \ r \ n" на физическом диске. Примечание: если вы просто используете C / C ++ для чтения файла обратно, вы не заметите, как ELS преобразуется обратно в "\ n" при чтении из файла.
  • 0
    @Martin - я нахожусь в .net и использую (для этого примера) File.AppendAllText с «\ r \ n», и я только что посмотрел в файл, и в конце линия. Магия?
Показать ещё 4 комментария
Теги:
ascii

10 ответов

880
Лучший ответ

Я бы использовал слово " r etur n ', r перед n.

  • 105
    И помните, что используемое слово - это возврат , помните, что \ r - это возврат каретки . Не забывайте, что «Return» - это название клавиши на клавиатурах Mac, иначе вы могли бы позже взглянуть на клавиатуру ПК, увидеть клавишу «Enter» и получить неправильный буквенный порядок!
  • 3
    @ Давид Но мне было интересно, что эффект от \n\r и \r\n одинаков, разве они не дают такой же эффект? ты можешь сказать разницу?
Показать ещё 8 комментариев
54

Если вы используете С#, вы должны использовать Environment.NewLine, что соответствует MSDN:

Строка, содержащая "\ r\n" для платформ, отличных от Unix, или строку, содержащую "\n" для платформ Unix.

  • 45
    На самом деле этот вид зависит от того, что вы делаете. Если вы просто выводите простой текст на консоль или в файл для локального использования, то Environment.NewLine вполне подойдет. Однако, если вы пишете вещи в четко определенном формате, формат может также определять и новую строку. Например, протокол HTTP гласит, что вы должны использовать \r\n в качестве ограничителя строки для заголовков и т. Д., Независимо от платформы.
  • 0
    это тоже java
Показать ещё 2 комментария
30

Новая строка зависит от вашей ОС:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

Подробнее здесь: https://ccrma.stanford.edu/~craig/utility/flip/

Если вы сомневаетесь, используйте любой бесплатный просмотрщик/редактор шестнадцатеричных файлов, чтобы увидеть, как файл кодирует новую строку.

Для меня я использую следующее руководство, чтобы помочь мне запомнить: 0D0A =\r\n = CR, LF = ca rr iage r eturn, li n e feed

  • 7
    Как ни странно, я один из тех людей, которые знают 0D0A наизусть, но все еще путают \r и \n .
  • 1
    Или я помню, что \ r - это возврат каретки, а \ n - перевод строки ... просто я не помню их порядок, поэтому не помогает запомнить, какой из них 0D, а какой 0A;)
19

Последовательность CR (возврат каретки) - LF (подача строки). Помните матричные принтеры? В точку. Итак - правильный порядок:\r\n

  • 0
    @ Davy8: О, чувак, я чувствую себя старым. 8В (
  • 0
    Я думаю, что это самый логичный ответ
Показать ещё 5 комментариев
7

В любом .NET langauge предпочтительнее Environment.NewLine.

  • 0
    Не работает для постоянных строк. При необходимости лучше не использовать константу, а вместо этого использовать статическую строку;)
5

Будьте осторожны с этим вручную.
На самом деле я бы посоветовал не делать это вообще.

В действительности мы говорим о последовательности завершения строки LTS, которая специфична для платформы.

Если вы откроете файл в текстовом режиме (то есть не бинарный), потоки преобразуют "\n" в правильный LTS для вашей платформы. Затем, когда вы читаете файл, преобразуйте LTS обратно в "\n".

В результате, если вы напечатаете "\ r\n" в файл Windows, вы получите последовательность "\ r\r\n" в физическом файле (посмотрите с шестнадцатеричным редактором).

Конечно, это настоящая боль, когда речь идет о передаче файлов между платформами.

Теперь, если вы пишете сетевой поток, я бы сделал это вручную (как это обычно называют большинство сетевых протоколов). Но я бы удостоверился, что поток не делает никакой интерпретации (поэтому двоичный режим был подходящим).

4

\r\n для Windows будет отлично.

  • 0
    Один \n отлично работает и на Windows, включая последнюю версию Блокнота.
  • 0
    Я думаю, что современные редакторы будут определять окончания строк, так как разные ОС используют разные окончания.
Показать ещё 2 комментария
4

Из Wikipedia (вы можете прочитать, что правильно для вашей ОС в этой статье):

Системы на основе ASCII или совместимые набор символов используют либо LF (Line feed, '\n', 0x0A, 10 в десятичной системе) или CR (Возврат каретки, '\ r', 0x0D, 13 в десятичная), или CR по LF (CR + LF, '\ r\n', 0x0D0A).

3

\r\n

Неверно сказать, что я помню это, потому что это противоположность пишущей машинки, которую я использовал.
Ну, если это было нормально, мне не нужно было это помнить... :-)

Изображение 7252 * Изображение из Википедии

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

Вы можете слушать из этой записи с freesound.org звук подачи бумаги в начале и примерно в -1: 03 секунд от конца, после предупреждения колокола о конце линейного звука барабана, который катится и после возврата каретки.

2

если вы используете С#, почему бы не использовать Environment.NewLine? (я предполагаю, что вы используете некоторые объекты записи файлов... просто передайте его Environment.NewLine и обработайте правильные терминаторы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню