PreguntaCómo convertir una cadena a RTF en C#?
¿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 utilizar 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 sólo la cadena "Europ \ 'e9en".
Stackoverflow
- Insert string with special characters into RTF
- How to output unicode string to RTF (using C#)
- Output RTF special characters to Unicode
- Convert Special Characters for RTF (iPhone)
También encontré muchos otros recursos en la web, pero nada solucionó mi problema.
respuesta
tuvo que añadir Trim()
para eliminar el espacio precedente en result
. Aparte de eso, la solución de Brad Christie parece funcionar.
Me ejecutaré con esta solución por ahora, aunque tengo una mala intuición, ya que tenemos que SubString y Trim the 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());
}
Lógica como un 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;
}
}
posible duplicado de [caracteres especiales de salida RTF a Unicode] (http: // sta ckoverflow.com/questions/1310694/output-rtf-special-characters-to-unicode) –
@Abe Miessler: He visto esa pregunta y he agregado el enlace a mi pregunta anterior. Sin embargo, no veo muy bien cómo eso resuelve mi problema (probablemente sí, pero no lo entiendo). ¿Podría quizás proporcionar un fragmento de código que haga que el método de prueba anterior pase? – Lernkurve
Revisa mi respuesta nuevamente, he publicado una solución (hacky) para tu pregunta. Mi esperanza es que solo traduzcas algunas cosas menores/más simples. –