Переносы строк windows linux

Как добавить перенос строки в Java

Перенос строки, он же перенос каретки это один или несколько спецсимволов, означающие окончание текущей строки символов и перевод картеки на новую строку. В зависимости от операционной системы используются разные спецсимволы. Например, в Windows используются спецсимволы CR + LF:

Спецсимолы Альт-код Управляющая последовательность Операционные системы
CR LF 13 10 \r \n DOS, OS/2, все версии Windows (в том числе и последние)
LF 10 \n Linux, macOS, Unix и прочие POSIX-совместимые системы
CR 13 \r Старые версии Mac OS (до версии 9)

Спецсимволу CR соответсвует альт-код 13, а спецсимволу LF альт-код 10. Кстати, CR означает carriage return (возврат каретки), а LF это line feed (перевод строки). Управляющая последовательность \r\n или \n как раз и обозначает перевод строки в Си подобных языках программирования.

Как сделать перенос строки

Допустим, у вас есть строка, содержимое которой выводится в консоль:

String oneLine = "Hello Java World!"; System.out.println(oneLine);

При выводе в консоль вы увидите те же слова, составляющие ровно одну строку, без переносов на новые строки. Как же нам добавить перенос строки в Java?

Для разных операционных систем переносом строки являются разные управляющие символы:
Для Windows это символы \r\n
Для Linux, macOS и прочих *nix систем это \n

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

Способ первый – захардкодить перенос строки

Допустим, ваша программа на Java запускается в Linux. Вы просто добавляете символы \n в то место в строке, в котором вам нужно сделать перевод на новую строку:

String multipleLines = "Hello\nJava\nWorld!"; System.out.println(multipleLines);

Теперь, при использовании переносов строки, вы, вместо одной строки в консоли увидите три строки – по каждой на символы \n

Но как же быть, если вы не хотите хардкодить символы переноса строки?

Способ второй – портабельный и правильный

Если вы не хотите писать символы \n каждый раз, когда хотите сделать перенос строки – вы можете воспользоваться стандартным методом System.lineSeparator() , который возвращает перенос строки для той операционной системы, в которой сейчас выполняется ваша программа. Это очень полезно, если программа исполняется и в Windows и в Linux окружении.

Просто используйте System.lineSeparator() в том месте, где вам нужно создать новую строку:

String multipleLines = "Hello" + System.lineSeparator() + "Java" + System.lineSeparator() + "World!"; System.out.println(multipleLines);

Итак, вы научились делать перевод строки в Java, используя два способа.

Читайте также:  Final exam linux essentials

Источник

Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки

Notepad в windows 10 начал понимать юниксовый перевод строки, а не только формат Windows.

С проблемой «каши» вместо удобочитаемого текста десятилетиями сталкивались те, кто пытался открыть в среде Windows текстовые документы, подготовленные на других операционных системах. Теперь же всё в одночасье изменяется. И это изменение столь же мало, сколь и эпично по своим практическим результатам и идеологическим последствиям. Microsoft вновь пытается играть в кросс-интеграцию и поддержку открытых стандартов.

Долгие годы Windows Блокнот мог нормально отображать только те текстовые документы, которые содержали символы начала новой строки в формате Windows End of Line (EOL) — «возврат каретки» (CR) и «подача на строку» (LF). На деле это приводило к тому, что Notepad не смог правильно отобразить содержимое текстовых файлов, созданных в Unix, Linux и macOS, где в качестве признака конца строки использовался только символ LF.

Например, вот скриншот Notepad, пытающегося отобразить содержимое текстового файла Linux .bashrc, который содержит только символы Unix LF EOL:

image

А вот скриншот недавно обновленного «Блокнота», отображающего содержимое того же самого файла UNIX / Linux .bashrc, но с правильными переносами:

image

Обратите внимание, что строка состояния указывает обнаруженный формат EOL текущего открытого файла.

Так же для гибкого управления новой возможностью в разделе реестра [HKEY_CURRENT_USER\Software\Microsoft\Notepad] вводятся два дополнительных ключа:

image

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

Что мы можем узнать о проблеме из Википедии

Исторически на механических пишущих машинках был рычаг, который возвращал каретку к левому краю страницы и прокручивал вал, подвигая бумагу вверх на строку. На телетайпах и более поздних алфавитно-цифровых печатающих устройствах (АЦПУ) вместо каретки была головка, в лазерных принтерах она перестала быть материальной, но в термине возврат каретки всё это продолжали называть кареткой, чтобы его не менять. На телетайпах возврат каретки и подачу строки разделили, откуда традиция представления перевода строки как CR+LF перешла и к текстовым файлам.

Системы, основанные на ASCII или совместимом наборе символов, используют или LF (перевод строки, 0x0A), или CR (возврат каретки, 0x0D) по отдельности, или последовательность CR+LF. Эти названия основаны на командах принтера: перевод строки означает, что одна строка на бумаге должна быть перенесена при печати, а возврат каретки означает, что каретка печатающего устройства должна вернуться к началу текущей строки.

  • CR (ASCII 0x0D) использовался в 8-битовых машинах Commodore, машинах TRS-80, Apple II, системах Mac OS до версии 9 и OS-9;
  • LF (ASCII 0x0A) используется в Multics, UNIX, UNIX-подобных операционных системах (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD), BeOS, Amiga UNIX, RISC OS и других;
  • CR+LF (ASCII 0x0D 0x0A) используется в DEC RT-11 и большинстве других ранних не-UNIX- и не-IBM-систем, а также в CP/M, MP/M, MS-DOS, OS/2, Microsoft Windows, Symbian OS, протоколах Интернет.
  • LF (U+000A): англ. line feed — подача строки ;
  • CR (U+000D): англ. carriage return — возврат каретки ;
  • NEL (U+0085): англ. next line — переход на следующую строку;
  • LS (U+2028): англ. line separator — разделитель строк;
  • PS (U+2029): англ. paragraph separator — разделитель абзацев.
Читайте также:  Linux команда вывести справку

Но как известно, стандарты стандартами, а реализации у всех часто выходят разными. И масла в огонь подливает необходимость корректно отображать унаследованные документы, созданные до эпохи юникода. Отсутствие единого общепринятого представления перевода строки в разных операционных системах надолго осложнило обмен текстовыми данными между ними.

Юникод старается примирить эту разницу, уравнивая CR, LF и CR+LF, однако вступает в противоречие с наследуемым им ASCII при трактовке последовательности LF+CR, не предварённой CR: согласно ASCII это один перевод строки, а согласно Юникоду — два.

Источник

What’s the difference between \n and \r\n?

\r is a old pre-OS X Macs Style, Modern Mac’s using POSIX Style.

\r is a carriage return and \n is a line feed, in old computers where it not have monitor, have only printer to get out programs result to user, if you want get printing from staring of new line from left, you must get \n for Line Feed, and \r for get Carriage return to the most left position, this is from old computers syntax saved to this time on Windows platform.

CR+LF is commonly used in many networking protocols (like HTTP), regardless of the OS used to transmit the data. \r is commonly mapped to CR whenever the target system uses ASCII or Unicode as its character system. (If the target system uses EBCDIC, then \r may not have a mapping.) \n is trickier, as it depends on context. It’s often mapped to an ASCII/Unicode LINE FEED, but it’s not always that simple. Answers to the «Possible Duplicate» question has details.

You can see the HTTP spec from here: w3.org/Protocols/rfc2616/rfc2616-sec5.html CRLF (carriage return line feed)

\n means new line. It means that the cursor must go to the next line.

\r means carriage return. It means that the cursor should go back to the beginning of the line.

Читайте также:  Linux kernel build file system

Unix programs usually only needs a new line (\n).

Windows programs usually need both.

I’m pretty sure you’re wrong and that Windows and Mac behave differently. But since I’m not Mac expert, I’ll remove the line about mac entirely and leave it to more knowledgeable people.

Prior to Mac OS X, Macs used \r alone as its line terminator. As Mac OS X / OS X / macOS is a Unix, the old convention was dropped in favor of the standard Unix convention of a single linefeed.

\n is a newline only, \r\n is a newline and a carriage return (i.e. move the cursor to the left).

‘\n’ is the default in Unix, ‘\r\n’ is the default in Windows.

Different Operating Systems handle newlines in a different way. Here is a short list of the most common ones: DOS and Windows

They expect a newline to be the combination of two characters, namely ‘\r\n’ (or 13 followed by 10).

Unix (and hence Linux as well)

Unix uses a single ‘\n’ to indicate a new line.

so this causes problems when u port your app from windows to mac when u’re using folder path’s and alike.

This is how new line is represented in operating systems Windows (\r\n)and linux (\n)

On Unix the \r is a Carriage Return (CR) and the \n a Line Feed (LF) which together happen to be the be Windows newline identifier and you are replacing them with a Unix newline identifier.

On Windows the \r is a CR, too, but the \n is a combination of CR and LF. So effectively you are trying to replace CR+CR+LF with CR+LF. Doesn’t make much sense, does it.

From «perldoc perlop»: All systems use the virtual «»\n»» to represent a line terminator, called a «newline». There is no such thing as an unvarying, physical newline character. It is only an illusion that the operating system, device drivers, C libraries, and Perl all conspire to preserve. Not all systems read «»\r»» as ASCII CR and «»\n»» as ASCII LF. For example, on a Mac, these are reversed, and on systems without line terminator, printing «»\n»» may emit no actual data. In general, use «»\n»» when you mean a «newline» for your system, but use the literal ASCII when you need an exact character. For example, most networking protocols expect and prefer a CR+LF («»\015\012″» or «»\cM\cJ»») for line terminators, and although they often accept just «»\012″», they seldom tolerate just «»\015″». If you get in the habit of using «»\n»» for networking, you may be burned some day.

Источник

Оцените статью
Adblock
detector