1

通过复制到剪贴板(感谢 Mike Stall 的 .NET 调试博客)并粘贴到 Outlook 电子邮件正文中,我能够成功嵌入 HTML 文本。

但是,使用 Word.Selection 的 PasteAndFormat()、PasteSpecial() 或 Past() 方法无法正确粘贴“特殊”Unicode 字符。除非我有这样的文字:“哦,我的上帝”,否则一切都很完美。

在 Paste() 操作之前,我可以获取剪贴板文本并看到正确的文本已放入缓冲区,并且我知道字体支持这些字符,因为我可以复制并粘贴到电子邮件正文中的嵌入 HTML在我的代码执行之后(看起来不错),但我似乎无法将带有这些“特殊字符”的文本粘贴()到 Word.Selection 中。我正在使用 C#、Visual Studio 2010 和 Outlook 2010,仅供参考。

提前感谢您的帮助。

-埃里克

4

1 回答 1

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();
}
于 2012-05-09T20:30:08.380 回答