0

我有被误解的 RTF。 StringWriter接受 a\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正确显示 3 列中的数据RichTextBox

rtfBrokenByConversion导致第 3 列不显示任何数据(或在其列之外和右侧的数据,具体取决于用于解释 RTF 的 DLL)。

字符串编写器代码

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

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

4

2 回答 2

0

像其他特殊字符一样\r, \n,\t不能在 RTF 内部轻松使用。该字符需要转换为其等效的 RTF。在这种情况下,我创建了一个扩展来清除格式错误的文本:

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

现在一切看起来都很棒。

于 2013-01-02T21:12:09.603 回答
0

您可以通过查看 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 将为您提供十六进制值。

于 2013-01-02T18:23:14.957 回答