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

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

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

以前的行为

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

新行为

  • SDK 不会在其他程序退出后更改终端编码。
  • 默认情况下,SDK 不再对不支持它的 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。

另请参阅