如果设置了DOTNET_CLI_UI_LANGUAGE
或VSLANG
环境变量,.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 提供了较差的体验。
尚未使用VSLANG
和DOTNET_CLI_UI_LANGUAGE
变量的开发人员不会受到影响。 影响应该很小,因为由于出现乱码字符,这种语言设置一开始就无法很好地工作。 此外,仅使用 Windows 10 或更高版本的开发人员可能会受到影响,其中大多数可能使用版本 1909 或更高版本。
旧有方案不太可能支持已损坏或不完整的语言,因此也不太可能使用可能暴露这些问题的其他语言。
建议的措施
- 如果使用的是较旧版本的 Windows 10,请升级到版本 1909 或更高版本。
- 如果想要使用旧版控制台,或者由于编码更改而面临生成问题或其他问题,请取消设置
VSLANG
并DOTNET_CLI_UI_LANGUAGE
禁用此更改。