2013-10-04 24 views
0

我有一些需要在RTF文件中插入的UTF西里爾文本。 RTF文件傾向於將西里爾文本存儲爲轉義序列,使用\ '00或\ u0000。在.Net中將UTF轉換爲RTF轉義序列

由於文本是在.NET中,我猜它是UTF-16。作爲一個具體的例子,我有這個文字"4 окт 2013"。 OKT是西里爾語文本。

使用о爲例,Unicode的十進制是1086和UTF-8十進制爲208 190

我想什麼做的是有一個正則表達式(在.NET)認識到這樣的字符,需要轉換爲RTF轉義序列,因爲它們可以被本地識別。

.NET中有哪些Regex選項可用於幫助識別這樣的字符?

+0

是不是更容易使用替換? – Darka

+0

一個string.Replace或一個Regex.Replace?並非所有的字符都需要被RTF轉義。實際上,有一個特定的範圍。本文展示瞭如何在Python中完成它,但我需要在.NET中完成[http://www.zopatista.com/python/2012/06/06/rtf-and-unicode/] – Reuben

+0

對於西里爾文字符,你需要'[\ u0400- \ u04FF]' – hwnd

回答

0

我能夠使用匹配所有非基本拉丁文的正則表達式,並將其轉換爲RTF unicode轉義序列。

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很好(如阿拉伯語)以外的語言。