如何将项目符号打印到控制台

本文关键字:打印 控制台 符号 项目 | 更新日期: 2023-09-27 18:20:39

这是我的代码:

Console.WriteLine("•");

或者这个:

Console.WriteLine("'u2022");

结果(在我的电脑上):

*嘟嘟*

所需结果:

如何使上面的字符出现在我的控制台上?


我知道嘟嘟声是从哪里来的,因为项目符号被翻译成ASCII BELL字符。这个问题是在试图了解更多关于代码页437的信息时产生的。

如何将项目符号打印到控制台

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

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

我刚刚记得一个Windows控制台模式,它不处理ASCII代码,如bell和linefeed。我需要这些功能:

[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);

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

查看本文:更改控制台字体

DOS代码页437和850包含字节值的图形字符<32.是7,但7也是ASCII BEL控制字符。NET在将Unicode字符串打印到控制台时,会将其转换为CP850或本地等效字符串。当您将内容打印到控制台时,它们会被解释为Extended ASCII,所以字节7被解释为BEL控制字符,而不是项目符号。

若要强制控制台将低字节值解释为图形字符,则必须对其进行转义。NET应该自动执行,但它没有。

你需要用ESC ^做准备。所以试着打印这个:"'x1B^'x07"