Вы используете Систему-> Предпочтения-> апплет Мониторов? Или из командной строки;
$ gnome-display-properties
, Что апплет имеет кнопку "Detect monitors" и флажок для "Того же изображения во всех мониторах".
кроме того, Вам закрыли крышку ноутбука, в то время как соединено с двумя мониторами?
При условии, что все символы, которые вы обслуживаете, существуют в 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.
Вам нужно будет преобразовать строку в массив 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 };