0

この投稿で同様の質問を見つけましたが、私の問題は異なっているので、新しい投稿に値します。

基本的に、テキスト出力を生成するWPF / C#アプリケーションがあります。テキスト出力には、特殊「℗」文字のインスタンスがいくつか含まれています。ユーザーはボタンをクリックして情報を電子メールで送信でき、この部分は正常に機能します。ユーザーはアプリケーションの別のボタンをクリックして、同じテキスト出力をクリップボードにコピーできますが、これが問題です。次のコードを使用して、テキストをコピーして貼り付けています。

public void SetClipboardText(string text)
{
    try { Clipboard.SetData(DataFormats.Text, text); }
    catch (COMException)
    {
        MessageBox.Show("The clipboard was inaccessible, please try again later");
    }
}

public string GetClipboardText()
{
    if (Clipboard.ContainsData("Text"))
    {
        try { return Clipboard.GetData(DataFormats.Text) as string; }
        catch (COMException)
        {
            MessageBox.Show("The clipboard was inaccessible, please try again later");
        }
    }
    return string.Empty;
}

コピーしたテキストを外部のテキスト編集アプリケーションに貼り付けると、「℗」文字が「?」に置き換えられます。キャラクター。インターネットを検索した後、クリップボードにコピーする前のHTMLのエンコードに関する同様の問題に関連する別の記事を見つけました。ただし、メソッドの最初の行として次のコード行を追加した後SetClipboardText、貼り付けられた「℗」文字は、出力で「â„ —」に置き換えられます。

text = Encoding.GetEncoding(0).GetString(Encoding.UTF8.GetBytes(text));

これは、これがエンコーディングの問題であることを示しています。ですから、私の質問は、「℗」文字を正常にコピーして貼り付けるために、どの文字エンコードを使用できるかということです。この投稿のすべての「℗」文字からわかるように、クリップボードを使用してそれらをコピーして貼り付けることは確かに可能です...しかし、どのように?

追加情報:

「℗」文字は、すべてのWindows PCに含まれているArialフォントに由来し、Wordの「通常のテキスト」フォントにも含まれています。Visual Studio QuickWatchウィンドウに入力(int)'℗'した後、文字に関連する整数値8471を取得します。

ソリューションの更新:

@Ilya Ivanovのおかげで、コピー/貼り付けコードを次のように変更しました。これにより、特殊文字のコピーと貼り付けが正常に行われます。

public void SetClipboardText(string text)
{
    try { Clipboard.SetText(text); }
    catch (COMException)
    {
        MessageBox.Show("The clipboard was inaccessible, please try again later");
    }
}

public string GetClipboardText()
{
    if (Clipboard.ContainsText())
    {
        try { return Clipboard.GetText(); }
        catch (COMException)
        {
            MessageBox.Show("The clipboard was inaccessible, please try again later");
        }
    }
    return string.Empty;
}
4

1 に答える 1

5
于 2013-01-10T10:22:29.213 に答える