С вашим решением, как вы знаете, что вы охватили все возможные специальные символы? Если персонажа нет в вашем Заменяющем списке EncodeCharacters, то он окажется неправильным, верно?

с

Как преобразовать строку "Européen" в строку формата "Europ \ 'e9en" в формате RTF?

[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);
}

Что я нашел до сих пор

RichTextBox

RichTextBox может использоваться для определенных вещей. Пример:

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

Но тогда rtfFormattedString оказывается всем документом в формате RTF, а не только строкой "Europ \ 'e9en".

Переполнение стека

Вставить строку со специальными символами в RTFКак вывести строку Unicode в RTF (используя C #)Вывод специальных символов RTF в UnicodeКонвертировать специальные символы для RTF (IPhone)

Google

Я также нашел кучу других ресурсов в сети, но ничто не решило мою проблему.

Ответ

Ответ Брэда Кристи

Пришлось добавитьTrim() удалить предыдущее пространство вresult, Помимо этого, решение Брэда Кристи, кажется, работает.

Я пока воспользуюсь этим решением, хотя у меня плохое настроение, так как нам нужно SubString и обрезать черт из RichTextBox, чтобы получить строку в формате RTF.

Прецедент:

[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());
}

Логика как метод расширения:

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;
    }
}

Ответы на вопрос(6)

Ваш ответ на вопрос