将彩色非 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()
.
更改控制台的代码页会影响其他程序,因此您可能需要恢复原来的代码页。
我已经使用了 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 支持(参见 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()
.更改控制台的代码页会影响其他程序,因此您可能需要恢复原来的代码页。