我正在编写一个控制台应用程序,需要打印一些非典型的(用于控制台应用程序)unicode字符,如音符,方框图符号等。
大多数字符都正确显示,或显示?如果控制台使用的字体不存在字形,但我发现一个字符表现奇怪,可以通过下面的行演示:
Console.Write("ABC");
Console.Write('♪'); //This is the same as: Console.Write((char)0x266A);
Console.Write("XYZ");
当它运行时,它将打印ABC然后将光标移回到行的开头并用XYZ覆盖它。为什么会这样?
答案 0 :(得分:5)
控制台不使用Uncode,因此必须将字符转换为8位代码页。 ♪
字符将转换为代码为13(十六进制0x0d)的字符,即CR或Carrage Return。
在大多数代码页中,例如code page 850,CR字符符字形类似于四分音符,而266a字符被指定为Unicode等效字符。
但是,如果将CR字符写入控制台,它将不会显示四分音符字形,而是将其解释为控制字符CR,它将光标移动到行的开头。
答案 1 :(得分:2)
Console.Write('♪');
被视为Unicode。我的猜测是它将它转换为最接近的ASCII字符。您应该使用U+1D160
或相应的unicode,音乐等效。
在Unicode代码集中生成音乐输出所需的基元(从U + 1D100开始)。例如,U + 1D11A是一个5行的工作人员,U + 1D158是一个封闭的符头。
请参阅http://www.unicode.org/charts/PDF/U1D100.pdf
..然后问题变得确保你有一个包含适当字形的字体(并处理正确间隔的问题等)。
如果您想要生成打印输出,您应该查看Lilypond,这是一个OSS音乐符号包,它使用文本文件格式来定义音乐内容,然后生成华丽的输出。