选项卡由RichTextBox错误解释

时间:2013-01-02 18:09:23

标签: c# rtf stringwriter

我的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导致第3列不显示数据(或者根据用于解释RTF的DLL而在其列的右侧和右侧显示数据)。

Stringwriter代码

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

如何更正此问题? (请注意,我尝试了StringBuilder并获得了相同的结果)

2 个答案:

答案 0 :(得分: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将为您提供十六进制值。

答案 1 :(得分:0)

与其他特殊字符\r, \n,一样,\t无法在RTF中使用。角色需要转换为它的RTF等价物。在这种情况下,我创建了一个扩展来清理格式错误的文本:

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

现在一切看起来都很棒。