System.Environment.NewLine和\n

Zat*_*h . 8 .net c# asp.net

使用Visual Studio 2010和C#

这已经工作了很多年......

 string myString= txtSomeMultiLineTextBox.Text;
 string str = myString.Replace(System.Environment.Newline, "<br />");
Run Code Online (Sandbox Code Playgroud)

设置断点时,如果myString = LineOne \nLineTwo \nLineThree
\n 未被替换...
则str = myString
没有替换.
myString保持不变


我到处都在研究Environment.Newline以及与操作环境的差异,我使用的是Windows 7.
这个环境不会改变.
为什么Environment.Newline没有读取\n?

谢谢,

Leo*_*ick 10

鉴于你已经标记了这一点,因为asp.net我认为这txtSomeMultiLineTextBox最终是一个TextArea.

TextArea返回由特定浏览器版本\n\r\n根据特定浏览器版本分隔的文本.(IE过去经常使用\r\n,现在使用\n,奇怪但真实.)

所以它之前可能工作的原因可能是因为你在早期版本的IE上测试,其中\r\n用作新行,而你现在使用IE 10,11或Chrome,并且\n是新行.

因此,要容忍这两种情况,请执行以下操作:

myString.Replace("\r\n", "\n").Replace("\n", "<br />");
Run Code Online (Sandbox Code Playgroud)

只是为了一劳永逸地解决这个问题:

不要相信Environment.NewLine为您解决这个问题.

如果您的环境是Windows,那么即使在Microsoft产品中也没有任何地方使用单一一致的新行.最好准备好卷起袖子,为自己规范线条结尾.


Sim*_*ead 5

因为Environment.NewLine是平台相关的。

Environment.NewLine在非Unix(... Windows)平台上为\r\n。那是回车和换行。

如果您的字符串仅包含\n..,则无法替换\r\n..,因为该分组不存在。

作为测试..只需替换\n..:

string myString= txtSomeMultiLineTextBox.Text;
string str = myString.Replace("\n", "<br />");
Run Code Online (Sandbox Code Playgroud)