A codificação do console não permanece UTF-8 após a conclusão

Correção do bug mencionado na saída do console da CLI usa alteração interruptiva UTF-8, em que o SDK do .NET alterava a codificação de todo o console. A codificação do console não permanece mais UTF-8 depois que o SDK do .NET executa um comando. É possível que os usuários tenham confiado nesse comportamento, portanto, essa é uma alteração interruptiva.

Além disso, o SDK do .NET não altera mais a codificação para UTF-8 em versões mais antigas do Windows 10 que não dão suporte total a ele.

Comportamento anterior

  • O SDK alterou a codificação de um terminal depois de executar um comando como dotnet build.
  • O SDK usou a codificação UTF-8 para renderizar corretamente caracteres que não são em inglês, mesmo em versões do Windows 10 que não dão suporte oficialmente ao UTF-8. O comportamento estava indefinido nessas versões.

Novo comportamento

  • O SDK não altera a codificação do terminal após a saída para outros programas.
  • Por padrão, o SDK não usa mais UTF-8 para versões do Windows que não dão suporte a ele.

Versão introduzida

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

Tipo de alteração interruptiva

Essa alteração pode afetar a compatibilidade binária. Também é uma alteração de comportamento.

Motivo da alteração

Havia um bug existente em que o SDK do .NET afetava a codificação no console para outros programas. Esse foi um bug corrigido, resultando nessa alteração interruptiva.

As versões mais antigas do Windows 10 (ou seja, versões antes da atualização de novembro de 2019) não dão suporte a UTF-8, portanto, o comportamento padrão não deve ser usar a codificação UTF-8. Em vez disso, uma aceitação agora está disponível.

Se o aplicativo precisar alterar a página de código no Windows, ele poderá executar um processo para invocar o comando chcp. Seu aplicativo não deve contar com o SDK do .NET para alterar a codificação.

Para versões mais antigas do Windows 10 que não dão suporte oficialmente ao UTF-8 em que você deseja que o SDK do .NET continue a alterar a codificação para UTF-8 para idiomas que não estão em inglês, você pode definir a variável de ambiente DOTNET_CLI_FORCE_UTF8_ENCODING como true ou 1.

Veja também