0

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

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

以 ® 为例,Unicode 十进制是 1086,UTF-8 十进制是 208 190。

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

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

4

1 回答 1

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 的语言(如阿拉伯语)。

于 2013-10-04T07:31:45.963 回答