控制台编码在完成后不保留 UTF-8

CLI 控制台输出使用 UTF-8 中断性变更(即 .NET SDK 更改了整个控制台的编码)中提到的 bug 已修复。 .NET SDK 执行命令后,控制台编码不再保留 UTF-8。 用户可能依赖该行为,因此这是一项中断性变更。

此外,.NET SDK 在不完全支持 UTF-8 的旧版 Windows 10 上不再将编码更改为 UTF-8。

旧行为

  • SDK 在运行 dotnet build 等命令后更改了终端的编码。
  • SDK 使用 UTF-8 编码来正确呈现非英语字符,即使在未正式支持 UTF-8 的 Windows 10 版本中也是如此。 这些版本上未定义此行为。

新行为

  • SDK 不会在退出其他程序后更改终端编码。
  • 默认情况下,SDK 对不支持 UTF-8 的 Windows 版本不再使用 UTF-8。

引入的版本

7.0.3xx .NET 8 预览版 3

中断性变更的类型

此项更改可能会影响二进制兼容性。 这也是一种行为变更

更改原因

存在一个现有 bug,即 .NET SDK 影响了控制台上其他程序的编码。 这是一个已修复的 bug,导致了这个中断性变更。

旧版本的 Windows 10(即 2019 年 11 月更新之前的版本)不支持 UTF-8,因此默认行为不应使用 UTF-8 编码, 而现在可以选择加入。

如果你的应用需要更改 Windows 上的代码页,它可以运行一个进程来调用 chcp 命令。 应用不应依赖 .NET SDK 来更改编码。

对于不正式支持 UTF-8 的较旧 Windows 10 版本,如果你希望 .NET SDK 继续将非英语语言的编码更改为 UTF-8,可以将环境变量 DOTNET_CLI_FORCE_UTF8_ENCODING 设置为 true 或 1。

另请参阅