在.Net中将UTF转换为RTF转义序列

时间:2013-10-04 06:38:50

标签: .net regex utf

我有一些需要插入RTF文件的UTF西里尔文本。 RTF文件倾向于将西里尔文本存储为转义序列,使用\ '00或\ u0000。

由于文本是在.NET中,我猜它是UTF-16。作为一个具体的例子,我有这个文本"4 окт 2013"。 OKT是西里尔文本。

以о为例,Unicode十进制数为1086,UTF-8十进制数为208 190.

我想要做的是使用正则表达式(在.NET中)来识别这样的字符,这些字符需要转换为RTF转义序列,因为它们可以被原生识别。

.NET中有哪些正则表达式选项可以帮助识别这样的字符?

1 个答案:

答案 0 :(得分: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));

保持我的手指交叉,这将适用于其他不适合Basic Latin和RTF的语言(如阿拉伯语)。