c# – 使用.NET的ANSI着色控制台输出
我尝试使用
ANSI escape codes使用以下最小C#程序生成彩色控制台输出:
using System; // test.cs class foo { static void Main(string[] args) { Console.WriteLine("x1b[36mTESTx1b[0m"); } } 我在Windows 7 x64上使用csc.exe运行Ansicon v1.66(Microsoft(R)Visual C#编译器版本4.6.0081.0). 彩色输出在这种配置下工作正常; Ansicon本身运作完美无缺. 要进行交叉检查,我使用一个与C#程序100%等效的node.js单行程序: // test.js console.log("x1b[36mTESTx1b[0m"); 而且,更基本的是手工制作的文本文件: 两者都正确地做了预期的事情:打印青色的字符串“TEST”: 只有我用csc构建的test.exe才能打印其他内容.为什么? 解决方法
如果使用AnsiCon x64环境,则需要为/ platform编译程序:x64;如果使用AnsiCon x86 / 32位版本,则需要使用/ platform:x86编译.确切的原因是一个谜……
最初我认为你需要这一切: 您需要获取StandardOutput并让Console.WriteLine相信您写入文件而不是控制台并使用ASCII编码. 这是它的工作方式: var stdout = Console.OpenStandardOutput(); var con = new StreamWriter(stdout,Encoding.ASCII); con.AutoFlush = true; Console.SetOut(con); Console.WriteLine("x1b[36mTESTx1b[0m"); .Net Console.WriteLine使用内部__ConsoleStream来检查Console.Out是作为文件句柄还是控制台句柄.默认情况下,它使用控制台句柄,因此通过调用WriteConsoleW写入控制台.在备注中,您会发现:
要将字节直接写入控制台而不使用WriteConsoleW干扰简单的文件句柄/流,这将通过调用OpenStandardOutput来实现.通过将该流包装在StreamWriter中,我们可以使用Console.SetOut再次设置它,我们就完成了.字节序列被发送到OutputStream并由AnsiCon拾取. 请注意,这仅适用于AnsiCon等适用的终端仿真器,如下所示: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |