Почему Console.Write по-разному относится к символу x266A? - PullRequest
6 голосов
/ 25 августа 2011

Я пишу консольное приложение, которое должно печатать некоторые нетипичные (для консольного приложения) символы юникода, такие как музыкальные ноты, символы рисования коробок и т. Д.

Большинство символов отображаются правильно или показывают? если глиф не существует ни для какого шрифта, который использует консоль, я нашел один символ, который ведет себя странно, что можно продемонстрировать с помощью строк ниже:

Console.Write("ABC");
Console.Write('♪'); //This is the same as: Console.Write((char)0x266A);
Console.Write("XYZ");

Когда он будет запущен, он напечатает ABC, затем переместит курсор назад к началу строки и перезапишет его с помощью XYZ. Почему это происходит?

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Консоль не использует Uncode, поэтому символы должны быть переведены в 8-битную кодовую страницу.Символ преобразуется в символ с кодом 13 (hex 0x0d), который представляет собой CR или возврат каретки.

В большинстве кодовых страниц, например кодовая страница 850 , CRСимвол chararacter напоминает четвертную ноту, а символ 266a указывается как эквивалент Unicode.

Однако, если вы записываете символ CR в консоль, он не будет отображать глиф четвертой ноты, вместо этого он интерпретируется какуправляющий символ CR, который перемещает курсор в начало строки.

2 голосов
/ 25 августа 2011

Console.Write('♪'); считается Unicode. Я думаю, это переводит его в ближайший ASCII-символ. Вы должны использовать U+1D160 или соответствующий юникод, музыкальный эквивалент.

В наборе кодов Unicode есть необходимые примитивы для генерации музыкального выхода (начиная с U + 1D100). Например, U + 1D11A - это штат из 5 строк, U + 1D158 - закрытый заголовок.

См. http://www.unicode.org/charts/PDF/U1D100.pdf

.. тогда проблема становится в том, чтобы убедиться, что у вас есть шрифт с включенными соответствующими символами (и правильно решать вопросы с пробелами и т. Д.)

Если вы хотите сгенерировать вывод на печать, вам следует взглянуть на Lilypond , который представляет собой пакет нотной записи OSS, который использует формат текстового файла для определения музыкального контента, а затем генерирует великолепный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...