2013-10-04 3 views
0

RTF 파일에 삽입해야하는 일부 UTF 키릴 문자가 있습니다. RTF 파일은 \ '00 또는 \ u0000을 사용하여 키릴 문자를 이스케이프 시퀀스로 저장하는 경향이 있습니다..Net에서 UTF를 RTF 이스케이프 시퀀스로 변환합니다.

텍스트가 .NET에 있기 때문에 UTF-16이라고 추측합니다. 구체적인 예를 들면,이 텍스트는 "4 окт 2013"입니다. OKT는 키릴 문자입니다.

예로서 о를 사용하여 유니 코드 소수는 1086이며, UTF-8 진수는 내가하고 싶은 무엇 (208) (190)

이 (.NET에서) 정규식이 같은 문자를 인식하는 것입니다 RTF 이스케이프 시퀀스는 기본적으로 인식 할 수 있기 때문에 RTF 이스케이프 시퀀스로 변환해야합니다.

. NET에서이 같은 문자 인식을 돕기 위해 사용할 수있는 정규식 옵션은 무엇입니까?

+0

대체하기가 쉽지 않으십니까? – Darka

+0

string.Replace 또는 Regex.Replace? 모든 문자가 RTF 이스케이프되어야하는 것은 아닙니다. 사실, 특정 범위가 있습니다. 이 기사에서는 파이썬에서이를 수행하는 방법을 보여줍니다.하지만 .NET에서해야합니다. [http://www.zopatista.com/python/2012/06/06/rtf-and-unicode/] – Reuben

+0

키릴 문자의 경우, 당신은'[\ u0400- \ u04FF]' – hwnd

답변

0

모든 비 기본 라틴어와 일치하는 Regex를 사용할 수 있었고 RTF 유니 코드 이스케이프 시퀀스로 변환 할 수있었습니다.

const string RTFSpecialsInUTF = @"(\P{IsBasicLatin})"; 

private static Regex UTFSpecialRegex = new Regex(RTFSpecialsInUTF, RegexOptions.Compiled); 

private static string ReplaceDirect(Match match) { 
    int codepoint = (int)Convert.ToChar(match.Groups[1].Value); 
    if (!(codepoint < 32768)) { 
     codepoint = codepoint - 65536; 
    } 
     return string.Format("\\u{0}?", codepoint); 
} 

/* Usage */ 
value = UTFSpecialRegex.Replace(value, new MatchEvaluator(PDFDocumentRTF.ReplaceDirect)); 

유지 내 손가락이는 기본 라틴어와 RTF로 잘 (아랍어 등)에 적합하지 않는 다른 언어로 작동합니다 건넜다.