DomandaCome convertire una stringa in RTF in C#?
Come faccio a convertire la stringa "Européen" alla stringa di 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);
}
Quello che ho trovato finora
RichTextBox
RichTextBox può essere utilizzato per certe cose. Esempio:
RichTextBox richTextBox = new RichTextBox();
richTextBox.Text = "Européen";
string rtfFormattedString = richTextBox.Rtf;
Ma poi rtfFormattedString risulta essere l'intero documento in formato RTF, non solo la stringa "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)
Ho anche trovato un sacco di altre risorse sul web, ma nulla ha risolto il mio problema.
risposta
dovuto aggiungere Trim()
per rimuovere lo spazio precedente in result
. Oltre a questo, la soluzione di Brad Christie sembra funzionare.
Per ora corro con questa soluzione anche se ho un pessimo sentimento perché dobbiamo SubString e Trim il diavolo da RichTextBox per ottenere una stringa in formato RTF.
Test case:
[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());
}
Logica come un metodo di estensione:
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;
}
}
possibile duplicato di [output RTF caratteri speciali Unicode] (http: // STA ckoverflow.com/questions/1310694/output-rtf-special-characters-to-unicode) –
@Abe Miessler: avevo visto questa domanda e ho aggiunto il link alla mia domanda sopra. Tuttavia, non vedo come questo risolva il mio problema (probabilmente lo fa, ma non lo capisco). Potresti forse fornire uno snippet di codice che rende obsoleto il precedente metodo di test? – Lernkurve
Controlla di nuovo la mia risposta, ho inviato una soluzione (hacky) alla tua domanda. La mia speranza è che tu stia solo traducendo alcune cose minori/più semplici. –