【问题标题】:How to copy/paste special characters with Windows Clipboard and C#如何使用 Windows 剪贴板和 C# 复制/粘贴特殊字符
【发布时间】:2013-01-10 10:18:27
【问题描述】:

我在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;
}

【问题讨论】:

    标签: c# windows special-characters clipboard


    【解决方案1】:

    尝试使用Clipboard.SetText("℗", TextDataFormat.UnicodeText); 而不是Clipboard.SetData。它适用于特殊符号,如

    我已经在LinqPad 中执行了这段代码,并且将剪贴板中的文本粘贴到文本编辑器中——工作正常。

    【讨论】:

    • +1 非常感谢@Ilya Ivanov,我不敢相信我错过了!感谢您的快速回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多