¿Cómo convertir una cadena a RTF en C #?

Pregunta

¿Cómo convierto la cadena "Européen" a la cadena con formato RTF "Europ \ 'e9en"?

[TestMethod]
public void Convert_A_Word_To_Rtf()
{
    // Arrange
    string word = "Européen";
    string expected = "Europ\'e9en";
    string actual = string.Empty;

    // Act
    // actual = ... // How?

    // Assert
    Assert.AreEqual(expected, actual);
}

Lo que he encontrado hasta ahora

RichTextBox

RichTextBox se puede usar para ciertas cosas. Ejemplo:

RichTextBox richTextBox = new RichTextBox();
richTextBox.Text = "Européen";
string rtfFormattedString = richTextBox.Rtf;

Pero entonces rtfFormattedString resulta ser todo el documento con formato RTF, no solo la cadena "Europ \ 'e9en".

Desbordamiento de pila

Insertar cadena con caracteres especiales en RTFCómo enviar una cadena Unicode a RTF (usando C #)Salida de caracteres especiales RTF a UnicodeConvertir caracteres especiales para RTF (iPhone)

Google

También encontré muchos otros recursos en la web, pero nada resolvió mi problema.

Responder

La respuesta de Brad Christie

Tuvo que agregarTrim() para eliminar el espacio anterior enresult. Aparte de eso, la solución de Brad Christie parece funcionar.

Correré con esta solución por ahora, aunque tengo un presentimiento malo ya que tenemos que SubString y Recortar el diablo de RichTextBox para obtener una cadena con formato RTF.

Caso de prueba:

[TestMethod]
public void Test_To_Verify_Brad_Christies_Stackoverflow_Answer()
{
        Assert.AreEqual(@"Europ\'e9en", "Européen".ConvertToRtf());
        Assert.AreEqual(@"d\'e9finitif", "définitif".ConvertToRtf());
        Assert.AreEqual(@"\'e0", "à".ConvertToRtf());
        Assert.AreEqual(@"H\'e4user", "Häuser".ConvertToRtf());
        Assert.AreEqual(@"T\'fcren", "Türen".ConvertToRtf());
        Assert.AreEqual(@"B\'f6den", "Böden".ConvertToRtf());
}

La lógica como método de extensión:

public static class StringExtensions
{
    public static string ConvertToRtf(this string value)
    {
        RichTextBox richTextBox = new RichTextBox();
        richTextBox.Text = value;
        int offset = richTextBox.Rtf.IndexOf(@"\f0\fs17") + 8; // offset = 118;
        int len = richTextBox.Rtf.LastIndexOf(@"\par") - offset;
        string result = richTextBox.Rtf.Substring(offset, len).Trim();
        return result;
    }
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta