In C#, what's the difference between \n
and \r\n
?

- 15,448
- 21
- 77
- 141

- 2,387
- 4
- 25
- 47
-
4This is unrelated to C# as it would be applicable in almost all languages. – leppie Oct 21 '10 at 09:39
-
2@leppie The answer may *coincidentally* apply to other languages. But other languages are free to do whatever they want. – Ian Boyd Mar 05 '22 at 17:01
-
Dont use any of the two above. Simply use Environment.NewLine – VivekDev Jul 31 '23 at 04:47
9 Answers
\n
is Unix, \r
is Mac, \r\n
is Windows.
Sometimes it's giving trouble especially when running code cross platform. You can bypass this by using Environment.NewLine
.
Please refer to What is the difference between \r, \n and \r\n ?! for more information. Happy reading

- 8,356
- 19
- 50
- 61

- 1,387
- 1
- 12
- 30
-
4Because nowadays Windows is not as strict in this as it use to be, so it accepts \n as well. – Peter van Kekem Mar 24 '17 at 09:06
-
1@TobySmith I know this post is old, but you can try writing a file with "\n" as linebreak and open it with the standard Windows Editor. He will not do a linebreak unless you did "\r\n" – Rüdiger Aug 16 '17 at 13:14
-
In Windows 10, support for all types of line endings is added in Notepad! https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/ – Peter van Kekem Mar 08 '19 at 11:05
The Difference
There are a few characters which can indicate a new line. The usual ones are these two:
* '\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
* '\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).
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.
* Mac
Macs use a single '\r'
.
Taken from Here

- 8,356
- 19
- 50
- 61

- 6,905
- 2
- 32
- 35
-
2AFAIK, Macs haven't used `\r` since OSX -- they use `\n` now. And `\r\n` happens to be used by just about every app-layer internet protocol in existence that ever works in terms of lines. – cHao Dec 28 '11 at 16:15
"\n" is just a line feed (Unicode U+000A). This is typically the Unix line separator.
"\r\n" is a carriage return (Unicode U+000D) followed by a line feed (Unicode U+000A). This is typically the Windows line separator.

- 1,421,763
- 867
- 9,128
- 9,194
-
Jon but if it's only line feed , so why the text in the pic looks like it also has carrige return http://i.stack.imgur.com/LKVCr.png ? if it was only a line feed so the _bbb..._ should not be at most left of the second line... – Royi Namir May 05 '13 at 08:24
-
1@RoyiNamir: It all depends on the display medium. So it looks like the Windows console shell treats `\n` as a complete line break now, but it may not in all versions - and if you view that same data as a file in notepad, you *won't* see a line break. – Jon Skeet May 05 '13 at 08:45
\n = LF (Line Feed) // Used as a new line character on Unix
\r = CR (Carriage Return) // Used as a new line character on Mac
\r\n = CR + LF // Used as a new line character on Windows
(char)13 = \r = CR
Environment.NewLine = any of the above code based on the operating system
// .NET provides the Environment class which provides many data based on operating systems, so if the application is built on Windows, and you use CR + LF ("\n\r" instead of Environment.NewLine) as the new line character in your strings, and then Microsoft creates a VM for running .NET applications in Unix, then there will be problem. So, you should always use Environment.NewLine when you want a new line character. Now you need not to care about the operating system.

- 30,738
- 21
- 105
- 131

- 3,079
- 4
- 29
- 26
Basically comes down to Windows standard: \r\n and Unix based systems using: \n

- 1,566
- 15
- 32
It's about how the operating system recognizes line ends.
- Windows user \r\n
- Mac user \r
- Linux uses \n
Morale: if you are developing for Windows, stick to \r\n. Or even better, use C# string functions to deal with strings which already consider line endings (WriteLine, and such).

- 30,738
- 21
- 105
- 131

- 23,820
- 10
- 76
- 86
\n is the line break used by Unix(-like) systems, \r\n is used by windows. This has nothing to do with C#.

- 33,034
- 36
- 130
- 210
They are just \r\n and \n
are variants.
\r\n
is used in windows
\n
is used in mac and linux

- 23,282
- 5
- 60
- 71
\r
inserts U+000DCARRIAGE RETURN\n
inserts U+000ALINE FEED
You can insert one, or the other, or both:
\r\n
inserts U+000DU+000A\n\r
inserts U+000AU+000D
If you intention is to indicate "the end of the line", different platforms, and different technologies, expect you to insert different things:
- Windows: U+000DU+000A (i.e.
\r\n
) - HTTP: U+000DU+000A (i.e.
\r\n
) - HTML: U+000A (i.e.
\n
) - Unix: U+000A (i.e.
\n
) - Macintosh: U+000D (i.e.
\r
) - zOS: U+0085 (i.e.
\x85
)

- 246,734
- 253
- 869
- 1,219