如何将子弹字符打印到控制台?

时间:2014-09-05 01:50:46

标签: c# unicode codepages

这是我的代码:

Console.WriteLine("•");

或者这个:

Console.WriteLine("\u2022");

结果(在我的电脑上):

  

*哔*

期望的结果:

如何在控制台上显示上述字符?


我知道哔哔声来自哪里,因为子弹被翻译成ASCII BELL字符。在尝试更多地了解代码页437时出现了这个问题。

4 个答案:

答案 0 :(得分:2)

我刚刚记得一个Windows控制台模式,它不会处理ASCII代码,如铃声和换行符。我需要这些功能:

[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int handle);

[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr handle, int mode);

在我尝试写入控制台之前,我这样做:

SetConsoleMode(GetStdHandle(-11), 2);

这将获取附加到stdout的本机屏幕缓冲区的句柄,并禁用ENABLE_PROCESSED_OUTPUT标志。

Console.WriteLine("•");

输出:

•♪◙

哎呀,这意味着它不会处理来自WriteLine的换行和回车。

Console.Write("•");

输出:

宾果!

现在,如果我想将控制台恢复为正常状态'在打印更多文字之前的模式,我可以这样做:

SetConsoleMode(GetStdHandle(-11), 3);

答案 1 :(得分:1)

这似乎比列出的其他选项更容易解决问题。 (它现在可以使用了,即使问题最初是在问的时候也没有。)

Console.OutputEncoding = System.Text.Encoding.UTF8;

答案 2 :(得分:0)

您很可能必须将控制台字体更改为支持该字符的字体。

查看此文章:Changing Console Fonts

答案 3 :(得分:0)

DOS代码页437和850包含字节值<32的图形字符。 是7,但7也是ASCII BEL控制字符。 .NET,在将Unicode字符串打印到控制台时,将它们转换为CP850或本地等效项。当您将东西打印到控制台时,它们会被解释为扩展ASCII,因此字节7被解释为BEL控制字符,而不是子弹。

如果要强制控制台将低字节值解释为图形字符,则必须将它们转义。恕我直言.NET应该自动完成,但事实并非如此。

You need to prepend it with ESC ^.请尝试打印:"\x1B^\x07"