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。