问题
如何将字符串 "Européen" 转换为 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);
}
我迄今为止找到的内容
RichTextBox
RichTextBox可以用于某些事情。例如:
RichTextBox richTextBox = new RichTextBox();
richTextBox.Text = "Européen";
string rtfFormattedString = richTextBox.Rtf;
但是,rtfFormattedString实际上是整个RTF格式的文档,而不仅仅是字符串“Europ\'e9en”。
Stackoverflow
我在网上还找到了一堆其他资源,但没有一个完全解决我的问题。
答案
必须添加Trim()
以删除result
中前面的空格。除此之外,Brad Christie的解决方案似乎有效。
虽然我们必须对RichTextBox进行SubString和Trim处理才能获得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;
}
}