将彩色非 ASCII 字符打印到 CLI

Printing colorful non-ASCII characters to CLI

我已经使用了 Colorful Console nuget:

<PackageReference Include="Colorful.Console" Version="1.2.15" />

打算将非 ASCII 字符打印到 Powershell 中的控制台应用程序:

using Console = Colorful.Console;
...
Console.Write("•", Color.Gray);

但这不会在 powershell 或 VSCode 终端中显示任何内容。

我是不是遗漏了什么或者 powershell 在着色时根本无法显示该字符?

要在 Windows 上获得完整的 Unicode 支持,在调用程序之前确保控制台的代码页是 65001 (UTF-8)

  • 来自 cmd.exe
    • chcp 65001
  • 来自 PowerShell:
    • $OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::new()

除非您碰巧使用了仍处于测试阶段的 Windows 10 功能,该功能激活了 系统 范围的 UTF-8 支持(参见 ), your default OEM (console) code page is a fixed, single-byte encoding such as 437 on US-English systems, which is limited to 256 characters and therefore cannot represent Unicode characters such as (BULLET, U+2022 ).

看起来,随着代码页 437 的生效, 退化为 不可见的 ASCII 范围控制字符(ALERT,U+0007 ).

注:

  • 此行为并非特定于 Colorful.Console 包;它同样适用于内置 Console.WriteLine().

  • 更改控制台的代码页会影响其他程序,因此您可能需要恢复原来的代码页。