我怎样才能得到特殊的Unicode字符粘贴剪贴板到Outlook电子邮件时出现?(How can I

2019-10-16 16:05发布

我能够成功地嵌入HTML文本复制到剪贴板(感谢迈克失速的.NET调试博客)并粘贴到Outlook电子邮件的正文。

然而,“特”的Unicode字符没有得到粘贴在正确使用Word.Selection的PasteAndFormat(),PasteSpecial的(),或过去的()方法。 一切都完美的作品,除非我有这样的文字:“噢,我的上帝”。

粘贴()操作之前,我可以得到剪贴板中的文本,并看到正确的文本已投入缓冲区,我知道字体支持这些字符,因为我可以做一个复制和粘贴到电子邮件正文中嵌入HTML之后我的代码执行(和它看起来不错),但我似乎无法与这些“特殊字符”()文本粘贴到Word.Selection。 我使用C#,Visual Studio 2010中,并展望2010年,仅供参考。

预先感谢帮助。

-Eric

Answer 1:

我认为最简单的答案是,以确保您所有逃逸非ASCII字符的HTML。 这只是避免了潜在的问题是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();
}


文章来源: How can I get special Unicode characters to appear when Pasting the Clipboard into an Outlook Email?