在C#中,\n和\r\n有什么区别?

64
在C#中,\n\r\n有什么区别?

4
这与C#无关,因为它几乎适用于所有编程语言。 - leppie
2
@leppie 答案可能巧合地适用于其他语言。但其他语言可以自由地做任何他们想做的事情。 - Ian Boyd
请勿使用上述两种方法。只需使用 Environment.NewLine。 - VivekDev
9个回答

75

\n 表示 Unix,\r 表示 Mac,\r\n 表示 Windows。

有时在跨平台运行代码时会出现问题。您可以通过使用 Environment.NewLine 来避免这种情况。

更多信息,请参考什么是 \r、\n 和 \r\n 之间的区别?祝阅读愉快。


4
由于现在Windows对此不再像以前那样严格,因此它也接受\n。 - Peter van Kekem
1
@TobySmith 我知道这篇帖子很老了,但你可以尝试使用"\n"作为换行符编写文件,并使用标准的Windows编辑器打开它。除非你输入"\r\n",否则他将不会进行换行。 - Rüdiger
在Windows 10中,Notepad添加了对所有类型行尾的支持!https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/ - Peter van Kekem

42

区别

有几个字符可以表示新的一行。通常使用的是这两个:

* '\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).

不同的操作系统以不同的方式处理换行符。以下是最常见的几种:

* DOS and Windows

他们期望换行是由两个字符组成的,即 '\r\n'(或者是13和10相连)。
* Unix (and hence Linux as well)

Unix使用单个'\n'来表示新的一行。

* Mac

Mac电脑使用单个'\r'

摘自这里


2
据我所知,自从OSX以来,Mac就不再使用\r了--现在它们使用\n。而且,几乎所有存在的应用层互联网协议都使用\r\n作为行末标识符。 - cHao

13

"\n" 是一个换行符 (Unicode U+000A),通常用于表示 Unix 操作系统的行分隔符。

"\r\n" 是一个回车符 (Unicode U+000D) 后面跟着一个换行符 (Unicode U+000A),通常用于表示 Windows 操作系统的行分隔符。


Jon,但如果只是换行符,那么为什么图片中的文本看起来像也有回车符http://i.stack.imgur.com/LKVCr.png?如果只是一个换行符,那么_bbb..._不应该在第二行最左边... - Royi Namir
1
@RoyiNamir:这完全取决于显示媒介。因此,看起来Windows控制台shell现在将\n视为完整的换行符,但并非所有版本都是如此 - 如果您在记事本中查看相同的数据文件,则不会看到换行符。 - Jon Skeet

4

\n = LF (Line Feed) // 在 Unix 中用作换行符号

\r = CR (Carriage Return) // 在 Mac 中用作换行符号

\r\n = CR + LF // 在 Windows 中用作换行符号

(char)13 = \r = CR

Environment.NewLine = 根据操作系统自动选择上述任意一种代码

// .NET 提供了 Environment 类,该类提供了许多基于操作系统的数据。因此,如果应用程序在 Windows 上构建,并且您在字符串中使用 CR + LF(而不是 Environment.NewLine)作为换行字符,则 Microsoft 为在 Unix 中运行 .NET 应用程序创建虚拟机时会出现问题。因此,当您想要一个新的换行符号时,应始终使用 Environment.NewLine。 现在您无需考虑操作系统。


2

0
这是关于操作系统如何识别行尾的内容。
  • Windows 用户使用 \r\n
  • Mac 用户使用 \r
  • Linux 使用 \n

教训是:如果你正在为 Windows 开发,请坚持使用 \r\n。或者更好的办法是,使用 C# 字符串函数处理已经考虑了行尾的字符串(例如 WriteLine 等)。


0

\n 是 Unix(类似)系统使用的换行符,\r\n 是 Windows 使用的。这与 C# 无关。


0

它们只是\r\n和\n的变体。

\r\n在Windows中使用

\n在Mac和Linux中使用


0

您可以插入其中一个,或两个都插入:

  • \r\n 插入 U+000DU+000A
  • \n\r 插入 U+000AU+000D

如果您的意图是表示“行末”,不同的平台和技术需要您插入不同的内容:

  • Windows: U+000DU+000A (即\r\n)
  • HTTP:U+000DU+000A (即\r\n)
  • HTML:U+000A (即\n)
  • Unix:U+000A (即\n)
  • Macintosh:U+000D (即\r)
  • zOS:U+0085 (即\x85)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接