为什么Console.Write对字符x266A的处理方式不同?

M51*_*M51 6 .net c# unicode

我正在编写一个控制台应用程序,需要打印一些非典型的(用于控制台应用程序)unicode字符,如音符,框图符号等.

大多数字符都正确显示,或显示?如果控制台使用的字体不存在字形,但我发现一个字符表现奇怪,可以通过以下行演示:

Console.Write("ABC");
Console.Write('?'); //This is the same as: Console.Write((char)0x266A);
Console.Write("XYZ");
Run Code Online (Sandbox Code Playgroud)

当它运行时,它将打印ABC然后将光标移回到行的开头并用XYZ覆盖它.为什么会这样?

Guf*_*ffa 5

控制台不使用Uncode,因此必须将字符转换为8位代码页.该?字符将转换为代码为13(十六进制0x0d)的字符,即CR或Carrage Return.

在大多数代码页中,例如代码页850,CR字符字形类似于四分音符,而266a字符被指定为Unicode等效字符.

但是,如果将CR字符写入控制台,则不会显示四分音符字形,而是将其解释为将光标移动到行首的控制字符CR.