Как произвести строку unicode к RTF (использующий C#)

Вы используете Систему-> Предпочтения-> апплет Мониторов? Или из командной строки;

$ gnome-display-properties

, Что апплет имеет кнопку "Detect monitors" и флажок для "Того же изображения во всех мониторах".

кроме того, Вам закрыли крышку ноутбука, в то время как соединено с двумя мониторами?

20
задан Jens Mühlenhoff 18 December 2015 в 14:20
поделиться

2 ответа

При условии, что все символы, которые вы обслуживаете, существуют в Basic Multilingual Plane (маловероятно, что вам понадобится что-то еще), тогда будет достаточно простой кодировки UTF-16 .

Википедия:

Все возможные кодовые точки из U + 0000 через U + 10FFFF, кроме суррогатные кодовые точки U + D800 – U + DFFF (которые не являются персонажами), являются однозначно отображается UTF-16 независимо от текущего или будущего кодовой точки присвоение или использование символов.

В следующем примере программы показано, как делать что-то в соответствии с тем, что вы хотите:

static void Main(string[] args)
{
    // ë
    char[] ca = Encoding.Unicode.GetChars(new byte[] { 0xeb, 0x00 });
    var sw = new StreamWriter(@"c:/helloworld.rtf");
    sw.WriteLine(@"{\rtf
{\fonttbl {\f0 Times New Roman;}}
\f0\fs60 H" + GetRtfUnicodeEscapedString(new String(ca)) + @"llo, World!
}"); 
    sw.Close();
}

static string GetRtfUnicodeEscapedString(string s)
{
    var sb = new StringBuilder();
    foreach (var c in s)
    {
        if (c <= 0x7f)
            sb.Append(c);
        else
            sb.Append("\\u" + Convert.ToUInt32(c) + "?");
    }
    return sb.ToString();
}

Важным битом является Convert.ToUInt32 (c) , который по существу возвращает значение кодовой точки для рассматриваемого персонажа. Для экранирования RTF для юникода требуется десятичное значение юникода. Кодировка System.Text.Encoding.Unicode соответствует UTF-16 согласно документации MSDN.

27
ответ дан 29 November 2019 в 23:20
поделиться

Вам нужно будет преобразовать строку в массив byte [] (используя Encoding.Unicode.GetBytes (string) ), а затем выполнить цикл этот массив и добавьте символы \ и u ко всем найденным вами символам Unicode. Когда вы затем конвертируете массив обратно в строку, вам придется оставить символы Unicode как числа.

Например, если ваш массив выглядит так:

byte[] unicodeData = new byte[] { 0x15, 0x76 };

, он будет выглядеть так:

// 5c = \, 75 = u
byte[] unicodeData = new byte[] { 0x5c, 0x75, 0x15, 0x76 };
1
ответ дан 29 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: