我有一些需要插入RTF文件的UTF西里尔文本。 RTF文件倾向于将西里尔文本存储为转义序列,使用\ '00或\ u0000。
由于文本是在.NET中,我猜它是UTF-16。作为一个具体的例子,我有这个文本"4 окт 2013"
。 OKT是西里尔文本。
以о为例,Unicode十进制数为1086,UTF-8十进制数为208 190.
我想要做的是使用正则表达式(在.NET中)来识别这样的字符,这些字符需要转换为RTF转义序列,因为它们可以被原生识别。
.NET中有哪些正则表达式选项可以帮助识别这样的字符?
答案 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的语言(如阿拉伯语)。