为什么C#.net在我进行替换时会删除我的换行符,我如何才能阻止它?

为什么C#.net在我进行替换时会删除我的换行符,我如何才能阻止它?,c#,.net,regex,visual-studio,replace,C#,.net,Regex,Visual Studio,Replace,我有一个文本区域保存到一个数据库,我用它作为电子邮件的正文发送 我允许令牌用作与该消息相关的信息的占位符 如果我根本不碰占位符,电子邮件发送就可以了,换行符与文本框中的完全相同(电子邮件以纯文本发送) 但是,当我开始使用replace函数时,新行字符开始消失,所有的行被推到一起 比如说 Body.Replace("%procedure%", CurrentOrder.Description); 将替换文本%procedure%,但也将删除行尾的换行符。即使换行符不是直接在替换文本之后 有什么想

我有一个文本区域保存到一个数据库,我用它作为电子邮件的正文发送

我允许令牌用作与该消息相关的信息的占位符

如果我根本不碰占位符,电子邮件发送就可以了,换行符与文本框中的完全相同(电子邮件以纯文本发送)

但是,当我开始使用replace函数时,新行字符开始消失,所有的行被推到一起

比如说

Body.Replace("%procedure%", CurrentOrder.Description);
将替换文本%procedure%,但也将删除行尾的换行符。即使换行符不是直接在替换文本之后

有什么想法吗

编辑:

现在,我只是将“\n”替换为“

”,并以HTML格式发送电子邮件。我宁愿把它保持为纯文本,因为我根本无法控制收件人


编辑2:这似乎是outlook本身的问题,而不是电子邮件的问题。我刚刚在gmail中查看了完全相同的电子邮件,格式是正确的。

如果是HTML,我会首先用BR标记替换新行:

String str = str.Replace(Environment.NewLine, "<br/>");
String str=str.Replace(Environment.NewLine,
);
或者使用JQuery或ajaxhtml编辑器或其他工具,而不是使用多行文本区域



也许你可以换一个占位符(如上所述,然后再换掉?

Outlook会删除新行,除非该行以两个空格结尾


如果您正在测试发送到使用Outlook的帐户的电子邮件,请尝试在新行之前添加两个空格,看看是否可以解决此问题。

是在代码中的字符串中删除了新行,还是在Outlook中删除了生成的电子邮件中的新行?您是否在不同的浏览器中测试了此问题?IIRC浏览器在文本区域添加换行符的方式上有所不同,可能是.NET在处理字符串时“修复”了它认为是“换行符”的内容。NET对换行符的理解可以通过Environment.NewLine访问。刚刚看到您的编辑-如果要替换,则浏览器差异更相关。\n@GregB我刚刚运行了一个正则表达式来查看匹配计数,看起来数字保持不变。我刚刚发现这是outlook的问题…感谢您的帮助。我将对此进行研究。这样做了
Body.Replace(Environment.NewLine,Environment.NewLine+)进一步调查后,您只需在换行符之前添加一个选项卡,outlook不会删除它。这还可以保持格式设置为真,而不是在每行换行符的开头添加两个额外的空格。您应该替换为
“”+Environment。换行符
,因此该行以两个空格结尾,而不是下一行以两个空格开头。