在RichTextBox中格式化rtf / unicode / utf-8的最简单方法?

时间:2009-02-09 20:38:23

标签: c# winforms utf-8 richtextbox rtf

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

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

以下是尝试粘贴有问题的文字:

  

[02:34]测试测试

2 个答案:

答案 0 :(得分: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中打开和关闭粗体。

答案 1 :(得分:0)

我没有测试用例,但您也可以使用ClipboardGetText methodUnicode TextDataFormat。基本上,我认为您可以将输入放在剪贴板中并以不同的格式将其输出(适用于RTF等)。这是MS的演示代码(不直接适用,但演示了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;
}

当然,如果你这样做,你可能想要保存和恢复剪贴板中的内容,否则你可能会让用户感到不安!