【问题标题】:How can I get special Unicode characters to appear when Pasting the Clipboard into an Outlook Email?将剪贴板粘贴到 Outlook 电子邮件中时,如何让特殊的 Unicode 字符出现?
【发布时间】:2012-05-03 22:31:36
【问题描述】:

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

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

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

提前感谢您的帮助。

-埃里克

【问题讨论】:

    标签: html outlook office-interop


    【解决方案1】:

    我认为最简单的答案是确保您转义 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();
    }
    

    【讨论】:

    • 由于这似乎有效,我认为你 (@EricPulaski) 应该接受答案,给予它应得的荣誉。
    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2019-02-04
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多