选项卡被RichTextBox错误解释



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

string rtfBeforeConversion = @"{rtf1{trowdcellx1150 cellx3750 cellx7350 Tempintblcell 96 - 99.7tintblcell 97.9tintblcell row}}";
string rtfBrokenByConversion = @"{rtf1{trowdcellx1150 cellx3750 cellx7350 Tempintblcell 96 - 99.7    intblcell 97.9    intblcell 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,并有相同的结果)

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

string s = @"{rtf1{trowdcellx1150 cellx3750 cellx7350 Tempintblcell 96 - 99.7    intblcell 97.9    intblcell 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;
    }

最新更新