ő在C#中转换RTF后变为õ。为什么?

时间:2012-10-31 11:36:08

标签: c# character-encoding rtf

我有一个将字符串转换为RTF-Strings的方法。

为此,我使用.NET提供的RichTextBox,如下所述:
How to convert a string to RTF in C#?

当我输入ő时,它会返回{\rtf1 {'f5\f1}}。但这似乎是õ,因为当我把它放入.rtf文件时,我得到了那个符号。

为什么会这样?我该怎么做才能解决这个问题?

编辑:

以下是我使用它的整个方法:

private static string ConvertToRtf(string text) {
        System.Windows.Forms.RichTextBox richTextBox = new System.Windows.Forms.RichTextBox();
        richTextBox.Text = text;
        int offset = richTextBox.Rtf.IndexOf(@"\f0\fs17") + 8;
        int length = richTextBox.Rtf.LastIndexOf(@"\par") - offset;
        string result = richTextBox.Rtf.Substring(offset, length).Substring(1);
        return result;
    }

1 个答案:

答案 0 :(得分:0)

  

rtfBox的整个RTF字符串看起来像这样(etc ..)

这很好并且显示正确。但是你的代码片段没有意义。你不能只是采取一小部分RTF并希望它正确显示。特别是\f0很重要,它选择了charset。在这种情况下,字符集238是东欧语言的字符集。注意RTF如何包含\fonttbl命令来分配f0。

因此,如果您复制RTF并在其他地方使用它,就像使用相同\fonttbl命令 初始化的其他RTB那样,您将获得一个来自错误的charset。就像charset 0一样,确实会显示õ

嗯,现在你知道为什么发明了Unicode;)

解决方法是仅复制RichTextBox.Text属性中的文本。这是Unicode。