2013-01-02 6 views
0

잘못 해석 된 RTF가 있습니다. StringWriter\t을 취하고 RichTextBox이 테이블 내부에서 처리 할 수없는 문자로 바꿉니다.탭이 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 결과는 세 번째 열에 데이터가 표시되지 않습니다 (또는 RTF를 해석하는 데 사용되는 DLL에 따라 열의 오른쪽 외부에있는 데이터).

StringWriter를 코드

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

어떻게이 문제를 해결할 수 있습니다?

+0

"StringWriter"에 의해 삽입되었습니다. "문제의 문자열이되는 것을'StringWriter'에 쓰는 코드를 공유 할 수 있습니까? – dasblinkenlight

답변

0

다른 특수 문자 \r, \n,과 마찬가지로 \t은 RTF 내부에서 쉽게 사용할 수 없습니다. 캐릭터를 RTF로 변환해야합니다.

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

이제 모든 것이 좋아 보이는데이 경우에는 내가 아픈 형식의 텍스트를 청소하는 확장을 만들었습니다.

0

당신은 같은 99.7 이후 문자를보고 특정 문자열의 문자를 식별 할 수 있습니다 (I이 같은 결과를 StringBuilder을 시도하고 있다고 주) :

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 진수 값을 제공합니다.

관련 문제