我的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
并获得了相同的结果)
答案 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;
}
现在一切看起来都很棒。