この投稿で同様の質問を見つけましたが、私の問題は異なっているので、新しい投稿に値します。
基本的に、テキスト出力を生成する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;
}