如何使用Windows剪贴板和C#复制/粘贴特殊字符

时间:2013-01-10 10:18:27

标签: c# windows special-characters clipboard

我在this post中发现了一个类似的问题,但我的问题不同,所以值得一篇新帖子。

基本上,我有一个生成文本输出的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;
}

1 个答案:

答案 0 :(得分:4)

尝试使用Clipboard.SetText("℗", TextDataFormat.UnicodeText);代替Clipboard.SetData。它适用于

等特殊符号

我在LinqPad中执行了此代码,并将剪贴板中的粘贴文本转换为文本编辑器 - 工作正常。