【问题标题】: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 method 和Unicode 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;
}
当然,如果您这样做,您可能希望保存和恢复剪贴板中的内容,否则您可能会惹恼您的用户!