0

誤解されている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にデータを含む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

この特定の文字列内の文字は、次のように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はユニコード文字の整数値を提供し、unicodeHexCodeは16進値を提供します。

于 2013-01-02T18:23:14.957 に答える
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 に答える