C# 为什么将rtf字符串应用于阿拉伯语文本时会给出“?”而不是格式?

C# 为什么将rtf字符串应用于阿拉伯语文本时会给出“?”而不是格式?,c#,string,formatting,rtf,C#,String,Formatting,Rtf,我试图通过提取标题样式的rtf字符串来应用MS Word中的标题样式。实际上,rtf字符串适用于英文文本,并对其应用格式,但当它应用于乌尔都语文本时,它会给出格式 让我给你们解释一下例子: 我选择用乌尔都语写的单词作为الغا㶊عبية,我已经有了一个rtf字符串,其中包含MS word标题样式的rtf,如下所示: {\rtf1\ansi\ansicpg1252…以获得格式化字符串 但是它没有给我格式的问号,而是给了格式的问号????我认为这是一个编码或字体问题。因此,请告诉我如何将rtf字符串

我试图通过提取标题样式的rtf字符串来应用MS Word中的标题样式。实际上,rtf字符串适用于英文文本,并对其应用格式,但当它应用于乌尔都语文本时,它会给出格式

让我给你们解释一下例子:

我选择用乌尔都语写的单词作为الغا㶊عبية,我已经有了一个rtf字符串,其中包含MS word标题样式的rtf,如下所示: {\rtf1\ansi\ansicpg1252…以获得格式化字符串


但是它没有给我格式的问号,而是给了格式的问号????我认为这是一个编码或字体问题。因此,请告诉我如何将rtf字符串应用于乌尔都语以获得格式化文本?

您需要使用函数将字符串中的unicode字符转换为相应的rtf代码:

static string GetRtfUnicodeEscapedString(string s)
{
    var sb = new StringBuilder();
    foreach (var c in s)
    {
        if(c == '\\' || c == '{' || c == '}')
            sb.Append(@"\" + c);
        else if (c <= 0x7f)
            sb.Append(c);
        else
            sb.Append("\\u" + Convert.ToUInt32(c) + "?");
    }
    return sb.ToString();
}
可在此处找到:


整数值大于127 7f十六进制的字符将转换为\uxxx?其中xxxx是字符的unicode。

请由Joel阅读。然后将代码添加到帖子中。\ansi\ansicpg1252提示您可能无法将Unicode放入其中。但我对RTF不太了解。Alexie我会按照你说的做,但现在告诉我Joey所指的ansi编码应该是什么unicode。SoRun Wordpad.exe,粘贴文本,保存文件。您将获得所需的RTF。