Самый простой способ отформатировать rtf / unicode / utf-8 в RichTextBox? - PullRequest
1 голос
/ 09 февраля 2009

Я сейчас бью себя головой о стену, пытаясь понять это. Короче говоря, я хотел бы преобразовать строку между 2 UTF-8 'u0002' в форматирование жирным шрифтом. Это для IRC-клиента, над которым я работаю, поэтому я немного разбирался с этим. Я попробовал regex и обнаружил, что сопоставление с rtf as ((\ '02) работает, чтобы поймать его, но я не уверен, как сопоставить последний символ и изменить его на \ bclear или что-либо подобное форматирующее закрытие rtf.

Я не могу точно вставить текст, который пытаюсь проанализировать, потому что символы отфильтрованы из поста. Но если смотреть на значение char, его int равен 2.

Вот попытка вставить оскорбительный текст:

[02:34] тестовый тест

Ответы [ 2 ]

1 голос
/ 09 февраля 2009

Вы можете использовать либо

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.

0 голосов
/ 25 июля 2013

У меня нет тестового примера, но вы также можете использовать 1003 * метод класса Clipboard с Unicode 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;
}

Конечно, если вы это сделаете, вы, вероятно, захотите сохранить и восстановить то, что было в буфере обмена, иначе вы можете расстроить своих пользователей!

...