我能够通过复制到剪贴板成功嵌入HTML文本(感谢Mike Stall的.NET调试博客)并粘贴到Outlook电子邮件的正文中。
但是,使用Word.Selection的PasteAndFormat(),PasteSpecial()或Past()方法无法正确粘贴“特殊”Unicode字符。一切都很完美,除非我有这样的文字:“Ôh我的gôd”。
在Paste()操作之前,我可以获取剪贴板文本并看到正确的文本已放入缓冲区,我知道字体支持这些字符,因为我可以复制并粘贴到嵌入式HTML中我的代码执行后的电子邮件正文(它看起来很好),但我似乎无法将带有这些“特殊字符”的粘贴()文本放入Word.Selection中。我正在使用C#,Visual Studio 2010和Outlook 2010,fyi。
提前感谢您的帮助。
-Eric
答案 0 :(得分:0)
我认为最简单的答案是确保您在html中转义所有非ascii字符。这简单地避免了潜在的问题,即unicode字符数据的复制/粘贴。
我不知道如何构建HTML,但所有文本和属性值都需要使用以下方法进行编码。
public static string HtmlEncode(string text, bool isAttribute)
{
if (text == null)
return null;
StringBuilder sb = new StringBuilder(text.Length + 100);
int len = text.Length;
for (int i = 0; i < len; i++)
{
char ch = text[i];
switch (ch)
{
case '\r':
case '\n':
if (isAttribute)
goto default;
sb.Append(ch);
break;
case '<':
sb.Append("<");
break;
case '>':
sb.Append(">");
break;
case '&':
sb.Append("&");
break;
default:
if (ch < 32 || ch > 127 || ch == '\'' || ch == '"')
{
sb.Append("&#");
sb.Append(((int)text[i]).ToString(CultureInfo.InvariantCulture));
sb.Append(";");
}
else
sb.Append(text[i]);
break;
}
}
return sb.ToString();
}