控制台编码在完成后不保留 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。