选项卡被RichTextBox错误解释

本文关键字:错误 解释 RichTextBox 选项 | 更新日期: 2023-09-27 17:50:38

我有被误解的RTF。StringWriter取一个't,并用RichTextBox不能在表中处理的一些字符替换它。

string rtfBeforeConversion = @"{'rtf1{'trowd'cellx1150 'cellx3750 'cellx7350 Temp'intbl'cell 96 - 99.7't'intbl'cell 97.9't'intbl'cell 'row}}";
string rtfBrokenByConversion = @"{'rtf1{'trowd'cellx1150 'cellx3750 'cellx7350 Temp'intbl'cell 96 - 99.7    'intbl'cell 97.9    'intbl'cell 'row}}";

rtfBeforeConversion正确显示RichTextBox中的3列数据。

rtfBrokenByConversion的结果在第三列显示没有数据(或数据外,并在它的列的右侧,这取决于正在使用的DLL解释RTF)。

Stringwriter代码

 using (StringWriter sw = new StringWriter())
            {
                GetRTF(sw);//inserts value of rtfBeforeConversion
                return sw.ToString();//ToString() creates rtfBrokenByConversion
            }

如何纠正这个问题?(请注意,我尝试了StringBuilder,并有相同的结果)

选项卡被RichTextBox错误解释

您可以通过查看99.7之后的字符来识别特定字符串中的字符,如下所示:

string s = @"{'rtf1{'trowd'cellx1150 'cellx3750 'cellx7350 Temp'intbl'cell 96 - 99.7    'intbl'cell 97.9    'intbl'cell 'row}}";
char c = s[s.IndexOf("99.7", 0) + 4]; //char you want
int x = (int) c;
string unicodeHexCode = x.ToString("X"); //hex code for char you want

x将为您提供unicode字符的整数值而unicodeHexCode会给你十六进制值

像其他特殊字符'r, 'n,一样,'t不能在RTF内部使用。需要将字符转换为它的RTF等价物。在这种情况下,我创建了一个扩展来清理格式不良的文本:

    public static string ConvertTabs(this string poorlyFormedRtf)
    {
        string unicodeTab = "'u0009";
        string result = poorlyFormedRtf.Replace(unicodeTab, "''tab");
        return result;
    }