我有被误解的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;
}