将剪贴板粘贴到Outlook电子邮件中时,如何才能显示特殊的Unicode字符?

时间:2012-05-03 22:31:37

标签: html outlook office-interop

我能够通过复制到剪贴板成功嵌入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

1 个答案:

答案 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("&lt;");
                break;
            case '>':
                sb.Append("&gt;");
                break;
            case '&':
                sb.Append("&amp;");
                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();
}