System.Environment.NewLine和\ n

时间:2014-02-27 03:49:09

标签: c# asp.net .net

使用Visual Studio 2010和C#

这已经有多年了......

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

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


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

谢谢,

3 个答案:

答案 0 :(得分:8)

鉴于您已将此标记为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 />");

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

不要相信Environment.NewLine为您解决此问题。

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

答案 1 :(得分:4)

因为Environment.NewLine与平台有关。

非Unix(... Windows)平台上的

Environment.NewLine\r\n。这是一个回车和换行。

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

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

string myString= txtSomeMultiLineTextBox.Text;
string str = myString.Replace("\n", "<br />");

答案 2 :(得分:1)

这是因为System.Environment.Newline由回车符和新行字符"\r\n"组成,因此它与“\ n”不匹配