31

在将换行符插入字符串时,我通常这样做:

str = "First line\nSecond line";

在 C# 中,这是标准做法吗?我还应该包括“回车”字符“\r”吗?以下之间有什么区别,如果有,它们是什么?

str = "First line\nSecond line";
str = "First line\r\nSecond line";

如果同时使用“回车”和“换行”是标准做法,是否有特定的顺序,为什么?

注意:我阅读了其他一些关于 SO 的帖子,但没有找到特定于 .NET/C# 的答案。

编辑:在测试了一个小应用程序后,我没有看到 '\n' 和 '\n\r' 或 '\r\n' 之间有任何区别。

4

5 回答 5

71

System.Environment.NewLine是您正在寻找的常量 - http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx它将提供特定于环境的组合,给定操作系统上的大多数程序将考虑“下一行文本”。

在实践中,大多数文本工具将所有包含的变体\n视为“换行符”,您可以在文本中使用它"foo\nbar"。特别是如果您尝试构建多行格式字符串,例如$"V1 = {value1}\nV2 = {value2}\n". 如果您使用字符串连接构建文本,请考虑使用NewLine. 在任何情况下,请确保\r\n使用的工具以您想要的方式理解输出,例如,如果您选择的编辑器无法正确打开文件,您可能需要始终使用而不考虑平台。

请注意,如果您打算使用其中一种方法编写文本,请避免使用这些方法,WriteLine因为生成的文本可能包含混合和 ,这可能会使某些工具感到困惑,并且绝对看起来不整洁。NewLine\n\r\n\n

有关历史背景,请参阅\n 和 \r 之间的区别?

于 2011-03-08T02:40:04.523 回答
12

回车\r将光标移动到当前行的开头。换行符\n导致下降到下一行,可能是下一行的开头;这就是 Alexei 上面提到的与平台相关的部分(在 *nix 系统\n上,您既可以回车又可以换行,而在 Windows 中则不会)

你使用什么取决于你想要做什么。例如,如果我想在控制台上做一些旋转的东西,我会做str = "|\r/\r-\r\\\r";

于 2011-03-08T02:46:02.383 回答
1

这取决于您在哪里显示文本。例如,在控制台或文本框上,\n 就足够了。在 RichTextBox 上,我认为你需要两者。

于 2011-03-08T02:43:27.880 回答
1

我知道这有点老了,但任何偶然发现此页面的人都应该知道 \n 和 \r\n 之间存在区别。

\r\n 给出 CRLF 行尾,\n 给出 LF 行尾字符。一般来说,眼睛的差异很小。

从字符串创建一个.txt,然后尝试在记事本中打开(正常不是记事本++),你会注意到不同之处

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIOD
Q44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901
Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

上面是使用“CRLF”,下面是“LF only”的样子(LF 显示的地方有一个看不到的字符)。

SHA,PCT,PRACTICE,BNF CODE,BNF NAME,ITEMS,NIC,ACT COST,QUANTITY,PERIODQ44,01C,N81002,0101021B0AAALAL,Sod Algin/Pot Bicarb_Susp S/F,3,20.48,19.05,2000,201901Q44,01C,N81002,0101021B0AAAPAP,Sod Alginate/Pot Bicarb_Tab Chble 500mg,1,3.07,2.86,60,201901

如果需要更正行尾并且文件足够小,您可以在 NotePad++ 中更改行尾(或粘贴到 word 中然后再回到记事本中 - 尽管这只会生成 CRLF)。

这可能会导致读取这些文件的某些函数可能不再起作用(给出的示例行来自 GP Prescribing data - England。文件已从 CRLF 行结尾更改为 LF 行结尾)。这停止了​​ SSIS 作业的运行并因无法读取 LF 行结尾而失败。

行尾信息来源: https ://en.wikipedia.org/wiki/Newline#Representations_in_different_character_encoding_specifications

希望这对未来的人有所帮助:) CRLF = 基于 Windows,LF 或 CF 来自基于 Unix 的系统(Linux、MacOS 等)

于 2019-04-16T11:14:05.117 回答
0

这总是一个好主意,虽然它并不总是必需的,但 Windows 标准将两者都包括在内。

\n 实际上代表一个换,或数字 10,并且典型的换行意味着在终端和电传打字机上“向下移动一行”。

\r 代表 CR、回车或数字 13。在 Windows、Unix 和大多数终端上,CR 将光标移动到行首。(对于 8 位计算机,情况并非如此:其中大多数确实使用 CR 前进到下一行。)

无论如何,某些进程(例如文本控制台)可能会在您发送 LF 时自动添加 CR。但是,由于 CR 只是移动到行首,因此发送 CR 两次并没有什么坏处。

另一方面,对话框、文本框和其他显示元素需要 CR 和 LF 才能正确开始新行。

由于发送两者确实没有缺点,并且在某些情况下都需要两者,因此最简单的策略是同时使用两者,如果您不确定。

于 2021-01-30T04:19:24.383 回答