【问题标题】:Easiest way to format rtf/unicode/utf-8 in a RichTextBox?在 RichTextBox 中格式化 rtf/unicode/utf-8 的最简单方法?
【发布时间】:2009-02-09 20:38:23
【问题描述】:

我目前正在努力解决这个问题。但长话短说,我想将 2 UTF-8 '\u0002' 之间的字符串转换为粗体格式。这是针对我正在处理的 IRC 客户端的,所以我已经遇到了很多。我已经使用了正则表达式,发现在 rtf 上匹配为 ((\'02) 可以捕获它,但我不确定如何匹配最后一个字符并将其更改为 \bclear 或任何 rtf 格式 close 。

我无法准确粘贴我要解析的文本,因为这些字符会从帖子中过滤掉。但是当查看 char 值时,它的 int 为 2。

这里尝试粘贴有问题的文本:

[02:34] 测试测试

【问题讨论】:

  • 粘贴字符并将其格式化为代码示例
  • 我试过了,无论如何它都会格式化它们。

标签: c# winforms utf-8 richtextbox rtf


【解决方案1】:

你可以使用任何一个

rtb.Rtf = Regex.Replace(rtb.Rtf, @"\\'02\s*(.*?)\s*\\'02", @"\b $1 \b0");

rtb.Rtf = Regex.Replace(rtb.Rtf, @"\\'02\s*(.*?)\s*\\'02", @"\'02 \b $1 \b0 \'02");

取决于您是否要将 \u0002s 保留在其中。

\b 和 \b0 在 RTF 中打开和关闭粗体。

【讨论】:

    【解决方案2】:

    我没有测试用例,但您也可以使用Clipboard 类的GetText methodUnicode TextDataFormat。基本上,我认为您可以将输入放在剪贴板中并以不同的格式输出(适用于 RTF 等)。下面是MS的demo代码(不能直接应用,但是演示了API):

    // Demonstrates SetText, ContainsText, and GetText. 
    public String SwapClipboardHtmlText(String replacementHtmlText)
    {
        String returnHtmlText = null;
        if (Clipboard.ContainsText(TextDataFormat.Html))
        {
            returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
        }
        return returnHtmlText;
    }
    

    当然,如果您这样做,您可能希望保存和恢复剪贴板中的内容,否则您可能会惹恼您的用户!

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多