Compartir vía


La salida de la consola de la CLI usa UTF-8

Si se establece la DOTNET_CLI_UI_LANGUAGE variable de entorno o VSLANG , la salida de la consola de la CLI de .NET y la codificación de entrada cambian a UTF-8, de modo que la página de códigos también pueda cambiar a UTF-8. Este nuevo comportamiento permite que los caracteres de los idiomas establecidos por esas variables de entorno se representen correctamente.

Este cambio solo afecta a los sistemas operativos Windows (la codificación estaba bien en otras plataformas). Además, solo se aplica a Windows 10 y versiones posteriores en las que la referencia cultural de la interfaz de usuario establecida por el usuario no es inglés.

Comportamiento anterior

Los caracteres en determinados idiomas, incluidos chino, alemán, japonés y ruso, a veces se mostrarían como caracteres engrasados o como ? en la consola. Por ejemplo:

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

Nuevo comportamiento

A partir de .NET 7 (versión 7.0.3xx) y .NET 8, los caracteres se representan correctamente. La codificación y la página de códigos cambian. Por ejemplo:

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

Las versiones de Windows anteriores a Windows 10 1909 no son totalmente compatibles con UTF-8 y pueden experimentar problemas después de este cambio. (A partir del SDK de .NET 8 y .NET 7.0.300, el SDK de .NET ya no cambia la codificación a UTF-8 en estas versiones de forma predeterminada. Para volver a usar UTF-8 incluso en versiones de Windows 10 que no lo admiten, use la DOTNET_CLI_FORCE_UTF8_ENCODING variable de entorno).

Además, había un error por el que el SDK podía influir en la codificación de otros comandos y programas invocados en el mismo símbolo del sistema después de que el SDK finalizara la ejecución. Ahora que el SDK cambia con más frecuencia la codificación, el impacto de este error puede aumentar. Sin embargo, el error se corrigió en el SDK de .NET 8 y .NET 7.0.300. Para más información, consulte SDK ya no cambia la codificación de la consola después de la finalización.

Versión introducida

7.0.3xx .NET 8 Preview 1

Tipo de cambio disruptivo

Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria. También es un cambio de comportamiento.

Motivo del cambio

El uso de la CLI de .NET en idiomas que no son en inglés proporciona una mala experiencia.

Los desarrolladores que aún no usaban las VSLANG variables y DOTNET_CLI_UI_LANGUAGE no se ven afectados. El impacto debe ser mínimo, ya que esta configuración de idioma no habría funcionado bien desde el principio debido a caracteres ilegibles. Además, solo los desarrolladores que usan Windows 10 o posterior podrían verse afectados, la mayoría de los cuales probablemente usen la versión 1909 o posterior.

En escenarios heredados es ya menos probables que se admitan los idioma que funcionan incorrectamente, por lo que es poco probable que quiera usar otro idioma que pueda ponga de manifiesto este error de todos modos.

  • Si usa una versión anterior de Windows 10, actualice a la versión 1909 o posterior.
  • Si desea usar una consola heredada o tiene problemas de compilación u otros problemas debido al cambio de codificación, desactive VSLANG y DOTNET_CLI_UI_LANGUAGE para deshabilitar este cambio.

Consulte también