1

クリップボードにコピーして (Mike Stall の .NET Debugging Blog に感謝)、Outlook 電子メール メッセージの本文に貼り付けることで、HTML テキストを正常に埋め込むことができます。

ただし、「特別な」Unicode 文字は、Word.Selection の PasteAndFormat()、PasteSpecial()、または Paste() メソッドを使用して正しく貼り付けられません。次のようなテキストがない限り、すべてが完全に機能します。

Paste() 操作の前に、クリップボードのテキストを取得し、正しいテキストがバッファーに入れられたことを確認できます。メール本文に埋め込まれた HTML にコピー アンド ペーストできるため、フォントがこれらの文字をサポートしていることがわかります。私のコードが実行された後(そしてそれはうまく見えます)、これらの「特殊文字」を含むテキストを Word.Selection に Paste() できないようです。私は 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 に答える