A saída do console da CLI usa UTF-8
Se a DOTNET_CLI_UI_LANGUAGE
variável de ambiente ou VSLANG
estiver definida, a codificação de entrada e saída do console da CLI do .NET será alterada para UTF-8, para que a página de código também possa mudar 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 foi aceitável em outras plataformas). Além disso, ele só se aplica ao Windows 10 e 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 eram exibidos como caracteres ilegíveis ou como ?
no console. Por exemplo:
C:\>dotnet build
MSBuild version 17.3.0-preview[...] for .NET
???????????????...
Novo comportamento
A partir do .NET 7 (versão 7.0.3xx) e do .NET 8, os caracteres são renderizados corretamente. Tanto a codificação quanto 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 suportam totalmente UTF-8 e podem ter problemas após esta alteração. (A partir do SDK do .NET 8 e do .NET 7.0.300, o SDK do .NET não altera mais a codificação para UTF-8 nessas versões, por padrão. Para optar por voltar a usar UTF-8 mesmo em versões do Windows 10 que não o suportam, use a DOTNET_CLI_FORCE_UTF8_ENCODING
variável de ambiente.)
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 a codificação com mais frequência, o impacto desse bug pode aumentar. No entanto, o bug foi corrigido no .NET 8 e .NET 7.0.300 SDK. Para obter mais informações, consulte SDK não altera mais a codificação do console após a conclusão.
Versão introduzida
7.0.3xx .NET 8 Visualização 1
Tipo de mudança de rutura
Essa alteração pode afetar a compatibilidade de origem e a compatibilidade binária. É também uma mudança de comportamento.
Razão para a alteração
Usar a CLI do .NET em idiomas diferentes do inglês proporcionou uma experiência ruim.
Os desenvolvedores que ainda não estavam usando as VSLANG
variáveis e DOTNET_CLI_UI_LANGUAGE
não são afetados. O impacto deve ser mínimo, já que essa configuração de linguagem não teria funcionado bem em primeiro lugar devido a caracteres ilegíveis. Além disso, apenas os desenvolvedores que usam o Windows 10 ou posterior podem ser afetados, a maioria dos quais provavelmente está usando a versão 1909 ou posterior.
Os cenários herdados já são menos propensos a suportar os idiomas quebrados, então é improvável que você queira usar outro idioma que possa expor essa quebra de qualquer maneira.
Ação recomendada
- Se estiver a utilizar 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 enfrentando problemas de compilação ou outros devido à alteração de codificação, desdefina
VSLANG
eDOTNET_CLI_UI_LANGUAGE
desative essa alteração.