A saída do console da CLI usa UTF-8

Se a variável de ambiente DOTNET_CLI_UI_LANGUAGE ou VSLANG estiver definida, as codificações de entrada e saída do console da CLI do .NET serão alteradas para UTF-8, de modo que a página de código também possa ser alterada para UTF-8. Esse novo comportamento permite que caracteres de idiomas definidos por essas variáveis de ambiente sejam renderizados corretamente.

Essa alteração afeta apenas os sistemas operacionais Windows (a codificação estava funcionando em outras plataformas). Além disso, ela só se aplica ao Windows 10 e a versões posteriores em que a cultura da interface do usuário definida pelo usuário não é em inglês.

Comportamento anterior

Caracteres em determinados idiomas, incluindo chinês, alemão, japonês e russo, às vezes apareciam como caracteres embaralhados ou como ? no console. Por exemplo:

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

Novo comportamento

Do .NET 7 (versão 7.0.3xx) e do .NET 8 em diante, os caracteres são renderizados corretamente. A codificação e a página de código são alteradas. Por exemplo:

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

As versões do Windows anteriores ao Windows 10 1909 não são totalmente compatíveis com UTF-8 e podem apresentar problemas após essa alteração. (A partir do SDK do .NET 8 e do .NET 7.0.300, o SDK do .NET deixou de alterar a codificação para UTF-8 nessas versões, por padrão. Para voltar a usar o UTF-8 mesmo nas versões do Windows 10 que não dão suporte a ele, use a variável de ambiente DOTNET_CLI_FORCE_UTF8_ENCODING).

Além disso, havia um bug existente em que o SDK pode afetar a codificação de outros comandos e programas chamados no mesmo prompt de comando após a conclusão da execução do SDK. Agora que o SDK altera com mais frequência a codificação, o impacto desse bug pode aumentar. No entanto, o bug foi corrigido no SDK do .NET 8 e do .NET 7.0.300. Para obter mais informações, confira SDK não altera mais a codificação do console após a conclusão.

Versão introduzida

7.0.3xx .NET 8 versão prévia 1

Tipo de alteração interruptiva

Essa alteração pode afetar a compatibilidade com binários e a compatibilidade com a origem. Também é uma alteração de comportamento.

Motivo da alteração

O uso da CLI do .NET em idiomas diferentes do inglês causava uma experiência ruim.

Os desenvolvedores que ainda não estavam usando as variáveis VSLANG e DOTNET_CLI_UI_LANGUAGE não eram afetados. O impacto deve ser mínimo, pois essa configuração de idioma não funcionava bem inicialmente devido a caracteres embaralhados. Além disso, somente os desenvolvedores que usam o Windows 10 ou posterior podem ser afetados, mas a maioria deles provavelmente já está usando a versão 1909 ou posterior.

Os cenários herdados já são menos propensos a dar suporte aos idiomas com defeito, portanto, é improvável que você queira usar um idioma que possa expor esse defeito.

  • Se você estiver usando uma versão mais antiga do Windows 10, atualize para a versão 1909 ou posterior.
  • Se você quiser usar um console herdado ou estiver com problemas de build ou outros devido à alteração de codificação, remova a definição de VSLANG e DOTNET_CLI_UI_LANGUAGE para desabilitar essa alteração.

Veja também