使用.NET中的Outlook文本体验奇怪的行结束字符串行为

时间:2012-12-12 15:40:12

标签: c# outlook-2010 end-of-line

当我尝试从我的C#程序创建电子邮件正文时,会发生一些有趣的事情

oItem.Body = text;

oItemMicrosoft.Office.Interop.Outlook.MailItemtext只是包含\n的普通字符串。当我这样做时,\n会被翻译为\r\n }。问题是某些\n被翻译成\r\n\r\n,我无法弄清楚为什么或何时。 text的内容来自不同的来源,但它只是一个普通的字符串,如下例所示

text: "Zusammenfassung:\nText0\nText1 \n\nText2\nText3\nText4 {...} TextX\n 

oItem.Body: "Zusammenfassung: \r\nText0 \r\nText1 \r\n\r\nText2\r\n\r\nText3\r\n\r\nText4 {...} TextX\r\n 

那里发生了什么?我完全糊涂了。

编辑:使用+ =

构建字符串时会创建双换行符
string lineToSend = "bla Bla: " + Sig + " bla bla " + string.Join(", ", usedCnt.toCntName());
if (refCnts.Count() != 0)
{

    lineToSend += "some Text";
}
else 
{
    lineToSend += " some other Text";
}

//lineToSend = "dummyStringLine";
messageObj.setMessageLines(lineToSend);

如果我使用dummyStringLine,一切都很好。

1 个答案:

答案 0 :(得分:0)

只是为了让它更容易找到地方的位置......你确定这是完全重复的吗?

"Zusammenfassung:\nText0\nText1 \n\nText2\nText3\nText4 {...} TextX\n 
                 ^1     ^2      ^3^4     ^5     ^6                 ^7
"Zusammenfassung: \r\nText0 \r\nText1 \r\n\r\nText2\r\n\r\nText3\r\n\r\nText4 {...} TextX\r\n 
                 ^1        ^2         ^3  ^4       ^5           ^6                       ^7

如果是这样,你显然很难过我,但是,我希望你假设的两个来源之间的某些东西略有不同,你错过了它,或类似的东西。

然而,我可以回答第一部分,我将这样做:它正在用\n替换\r\n,这是标准的“非Windows - > Windows行结束”转换过程。首先从\n获取文本的文本在哪里?如果从您的代码中,我建议您尝试在自己的代码中插入Environment.NewLine而不是\n

如果您从外部源获取文件,我建议在将输入提供给Outlook元素之前预先清理输入。


StringBuilder示例:

StringBuilder sb = new StringBuilder();

sb.AppendLine("Zusammenfassung:").AppendLine( text0 ).AppendLine( text1 ).AppendLine( Environment.NewLine );
sb.AppendLine( text2 );
sb.Append( text3 ).Append( Environment.NewLine );
//I'm sure you get the idea here

oItem.Body = sb.ToString();

看看通过这样做,你得到了同样的错误......我意识到这有点重构,但也许你可以假设部分方法让它更快?


使用您的代码...

StringBuilder sb = new StringBuilder("bla Bla: ");

sb.Append( Sig ).Append( " bla bla " ).Append( string.Join(", ", usedCnt.toCntName()) );
if (refCnts.Count() != 0)
{

    sb.Append( "some Text" );
}
else 
{
    sb.Append( " some other Text" );
}

//lineToSend = "dummyStringLine";
messageObj.setMessageLines(sb.ToString());