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,该 bug 会影响 SDK 执行完成后,在同一命令提示符中调用的其他命令和程序的编码。 现在 SDK 更频繁地更改了编码,此 bug 的影响可能会增加。 但是,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 禁用此更改。

另请参阅