Пожалуйста, отметьте ответ на этот вопрос .
Отредактировано для добавления
Поскольку вы говорите, что приведенный выше ответ относится к преобразованию RTF в обычный текст, согласно Спецификация RTF 1.6 вы используете \u261a
для отображения ą
, \u281e
для ę
.. .
Синтаксис: \ u Nd , где N - десятичное значение Unicode для символа, а d - приближение ASCII.
Отредактировано для уточнения
Для того, что вы говорите, у вас есть некоторые заполнители в RTF, верно?
Вам нужно иметь функцию, которая при замене заполнителей добавляет правильные символы в кодировке RTF.
После небольшого исследования, я думаю, вы можете использовать что-то вроде этого:
Public Function GetRtfString(ByVal text As String) As String
Dim sb As New Text.StringBuilder()
For Each c As Char In text
Dim code = Convert.ToInt32(c)
If (Char.IsLetter(c) AndAlso code < &H80) Then
sb.Append(c)
Else
sb.AppendFormat(CultureInfo.InvariantCulture, "\u{0}{1}", code, RemoveDiacritics(c))
End If
Next
Return sb.ToString()
End Function
Public Function RemoveDiacritics(ByVal text As String) As String
Dim formD = text.Normalize(System.Text.NormalizationForm.FormD)
Dim sb As New Text.StringBuilder()
For Each c As Char In formD
If (CharUnicodeInfo.GetUnicodeCategory(c) <> UnicodeCategory.NonSpacingMark) Then
sb.Append(c)
End If
Next
Return sb.ToString().Normalize(System.Text.NormalizationForm.FormC)
End Function