Я думаю, \n
перемещает иглу вниз и \r
перемещает иглу в начало линии (выравнивание по левому краю)? Я не уверен, хотя. Так что, если я ошибаюсь, поправьте меня ...
Во всяком случае, мне сказали , что для Windows и Linux ручка newlines
и по- carriage returns
разному. Я хотел бы знать, как они относятся к ним по-разному и в некоторых местах, где важно помнить. Спасибо за ответ.
linux
windows
newlines
carriage-return
千里 ち ゃ ん
источник
источник
\r\n
это нормально в Windows, но\n\r
это не так, и я помню это, потому что\r\n
это аббревиатура для зарегистрированной медсестры. Я также слышал, что\n
это то, что люди используют в Linux и\r
не используются в одиночку для той же цели, что и\r\n
.\r
используется в действительно старых MacOS. Я не проверял эти факты, хотя.\r
и\n
, как это\n
делается, зависит от того, где вы его используете. Лучше позвонить имCR
иLF
.Ответы:
Это правда, более или менее, но в основном историческое любопытство. Первоначально, подача строки (LF) использовалась, чтобы продвинуть бумагу одной линией на принтерах и печатных терминалах ( телепринтеры ); возврат каретки (CR) вернул печатающую головку в начало строки.
Это, вероятно, все еще работает на современных принтерах, когда используется в «текстовом режиме», но в остальном сегодня не имеет большого значения.
Разница в том, что разработчикам ОС приходилось выбирать, как изобразить начало новой строки текста в компьютерных файлах. По разным историческим причинам в мире Unix / Linux в качестве маркера новой строки был выбран один символ LF; MS-DOS выбрал CR + LF, и Windows унаследовала это. Таким образом, разные платформы используют разные соглашения.
На практике это становится все меньше и меньше проблемой. Маркер новой строки действительно имеет отношение только к тем программам, которые обрабатывают «простой текст», и их не так много - он в основном влияет только на исходный код программы, файлы конфигурации и некоторые простые текстовые файлы с документацией. В настоящее время большинство программ, обрабатывающих файлы такого типа (редакторы, компиляторы и т. Д.), Могут обрабатывать оба соглашения новой строки, поэтому не имеет значения, какой из них вы выберете.
В некоторых случаях инструменты настаивают на «своем» соглашении о новой строке (например, сценарии оболочки Unix не должны использовать CR + LF), и в этом случае вы должны использовать правильный.
источник
\n\r
и\n
являются ли они одинаковыми? Например, если бы я выполнял синтаксический анализ текстового файла, который был отредактирован на чужом компьютере и содержал как разрывы строк для Linux, так и для Windows, выполнил быpreg_match
for\n
и\n\r
дал бы другие результаты?CR и LF
В Американском стандартном коде для обмена информацией (ASCII) определены управляющие символы, включая CARRIAGE-RETURN (CR) и LINE-FEED (LF), которые использовались (и остаются) для управления положением печати на принтерах способом, аналогичным механические пишущие машинки, которые предшествовали ранним компьютерным принтерам.
Зависимость от платформы
В Windows традиционным разделителем строк в текстовых файлах является CR, за которым следует LF
В старых (до OSX) системах Apple Macintosh традиционным разделителем строк в текстовых файлах был CR
В Unix и Linux традиционным разделителем строк в текстовых файлах является LF.
\ n и \ r
Во многих языках программирования и написания сценариев
\n
означает «новая строка». Иногда (но не всегда) это означает символ ASCII LINE-FEED (LF), который, как вы говорите, перемещает курсор (или позицию печати) вниз на одну строку. В принтере или пишущей машинке это фактически сдвинет бумагу на одну строку вверх.Неизменно
\r
означает символ ASCII CARRIAGE-RETURN (CR), имя которого на самом деле происходит от механических пишущих машинок, где была клавиша возврата каретки, из-за которой валик («каретка»), по которому бумага перемещалась вправо, приводится в движение пружиной, насколько это возможно. Таким образом устанавливая текущую позицию набора текста на левом поле.программирование
В некоторых языках программирования
\n
может означать зависящую от платформы последовательность символов, которые заканчиваются или разделяют строки в текстовом файле. Например, в Perl,print "\n"
производит другую последовательность символов в Linux, чем в Windows.В Java, лучшая практика, если вы хотите использовать собственные окончания строк для платформы времени выполнения, не использовать
\n
или\r
вообще не использовать . Вы должны использоватьSystem.getProperty("line.separator")
. Вы должны использовать\n
и\r
где вы хотите LF и CR независимо от платформы (например, как используется в HTTP, FTP и других интернет-коммуникационных протоколах).Unix stty
В оболочке Unix
stty
команда может использоваться для перевода оболочки между этими различными соглашениями. Напримерstty -onlcr
, заставит оболочку впоследствии преобразовать все исходящие LF в CR LF.Linux и OSX следуют соглашениям Unix
Текстовые файлы
Текстовые файлы по-прежнему чрезвычайно важны и широко используются. Например, HTML и XML являются примерами текстового файла. Большинство важных интернет-протоколов, таких как HTTP, следуют соглашениям о текстовых файлах и включают спецификации для окончаний строк.
Принтеры
Большинство принтеров, кроме самых дешевых, по-прежнему уважают CR и LF. На самом деле они являются основополагающими для наиболее широко используемых языков описания страниц - PCL и Postscript.
источник
line.separator
. Это действительно зависит от того, что вы хотите.println()
автоматически используетline.separator
, поэтому, если вы хотите использовать собственные окончания строк, вы можете использовать ихprintln()
(и если вам нужен определенный конкретный тип окончания строки, не используйте его, но используйте «\ n» и т. Д. Явно).\n
управляющий символ отличается от ASCII LF (кроме систем на основе EBCDIC)? Я имею в виду то, что\n
означает в строковом или символьном литерале, а не эффект отправки его в файл или устройство вывода.\n
всегда код ASCII (и Unicode) 10, потому что JLS говорит об этом явно (JLS 3.10.6, «Escape-последовательности для символьных и строковых литералов» - я проверял :-)). Для других языков - хороший вопрос.Короче, был нужен для принтеров, но сейчас ОС делают это немного по-другому. В большинстве случаев хорошо просто выполнять CR и LF,
\r\n
и в большинстве случаев это будет работать нормально.источник
\r
или это вызывает какое-то изменение поведения?