CLI 控制台输出使用 UTF-8

如果设置了 DOTNET_CLI_UI_LANGUAGEVSLANG 环境变量,.NET CLI 控制台输出和输入编码更改为 UTF-8,代码页也可以更改为 UTF-8。 这种新行为允许正确呈现这些环境变量设置的语言中的字符。

此更改仅影响 Windows 操作系统(编码在其他平台上运行正常)。 此外,它仅适用于用户设置的 UI 区域性为非英语的 Windows 10 及更高版本。

旧行为

某些语言(包括中文、德文、日文和俄文)的字符有时会在控制台中显示为乱码或 ?。 例如:

C:\>dotnet build
MSBuild version 17.3.0-preview[...] for .NET
  ???????????????...

新行为

从 .NET 7(版本 7.0.3xx)和 .NET 8 开始,字符可以正确呈现。 编码和代码页都发生了变化。 例如:

C:\>dotnet build
MSBuild version 17.3.0-preview[...] for .NET
  正在确定要还原的项目…

低于 Windows 10 1909 的 Windows 版本不完全支持 UTF-8,在此更改后可能会遇到问题。 (从 .NET 8 和 .NET 7.0.300 SDK 开始,默认情况下,.NET SDK 不再将这些版本的编码更改为 UTF-8。若要在不支持 UTF-8 的 Windows 10 版本上选择重新使用 UTF-8,请使用 DOTNET_CLI_FORCE_UTF8_ENCODING 环境变量。)

此外,还有一个现有 bug,即 SDK 完成执行后,SDK 可能会影响同一命令提示符中调用的其他命令和程序的编码。 由于 SDK 更频繁地更改编码,此错误的影响可能会增大。 不过,该 bug 已在 .NET 8 和 .NET 7.0.300 SDK 中修复。 有关详细信息,请参阅 SDK 在完成后不再更改控制台编码

引入的版本

7.0.3xx .NET 8 预览版 1

中断性变更的类型

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

更改原因

以非英语语言形式使用 .NET CLI 会导致体验糟糕。

尚未使用 VSLANGDOTNET_CLI_UI_LANGUAGE 变量的开发人员不受影响。 影响应该很小,因为此语言设置一开始就因乱码无法正常运行。 此外,只有使用 Windows 10 或更高版本的开发人员可能会受影响,其中大多数可能使用的是 1909 或更高版本。

旧式场景已经不太可能支持受损的语言,因此不太建议使用另一种语言,这可能会暴露此损坏。

  • 如果使用的是旧版 Windows 10,请升级为版本 1909 或更高版本。
  • 如果要使用旧式控制台或因编码更改而面临生成问题或其他问题,请取消设置 VSLANGDOTNET_CLI_UI_LANGUAGE 以禁用此更改。

另请参阅