2012-05-03 48 views
1

我能夠通過複製到剪貼板成功嵌入HTML文本(感謝Mike Stall的.NET調試博客)並粘貼到Outlook電子郵件正文中。如何在將剪貼板粘貼到Outlook電子郵件時顯示特殊的Unicode字符?

但是,使用Word.Selection的PasteAndFormat(),PasteSpecial()或Past()方法無法正確粘貼「特殊」Unicode字符。除非我有這樣的文字,否則一切都可以正常工作:「Ôhmygôd」。

粘貼()操作之前,我可以得到剪貼板中的文本,並看到正確的文本已投入緩衝區,我知道字體支持這些字符,因爲我可以做一個複製和粘貼到嵌入式HTML在我的代碼執行後的電子郵件正文(它看起來很好),但我似乎無法將這些「特殊字符」粘貼()文本到Word.Selection中。我正在使用C#,Visual Studio 2010和Outlook 2010,fyi。

在此先感謝您的幫助。

-Eric

回答

0

我認爲最簡單的答案是,以確保您所有逃逸非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(); 
} 
+0

工程就像一個魅力。謝謝!! –

+1

由於這似乎奏效,我認爲你(@EricPulaski)應該接受答案,並賦予它應得的榮譽。 –

相關問題