这是我的代码:
Console.WriteLine("•");
或者这个:
Console.WriteLine("\u2022");
结果(在我的电脑上):
*哔*
期望的结果:
•
如何在控制台上显示上述字符?
我知道哔哔声来自哪里,因为子弹被翻译成ASCII BELL
字符。在尝试更多地了解代码页437时出现了这个问题。
答案 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)
•
是7,但7也是ASCII BEL控制字符。 .NET,在将Unicode字符串打印到控制台时,将它们转换为CP850或本地等效项。当您将东西打印到控制台时,它们会被解释为扩展ASCII,因此字节7被解释为BEL控制字符,而不是子弹。
如果要强制控制台将低字节值解释为图形字符,则必须将它们转义。恕我直言.NET应该自动完成,但事实并非如此。
You need to prepend it with ESC ^
.请尝试打印:"\x1B^\x07"