Comparteix a través de


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

Si se establece la variable de entorno DOTNET_CLI_UI_LANGUAGE 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 lenguajes establecidos por esas variables de entorno se representen correctamente.

Este cambio solo afecta a los sistemas operativos Windows (la codificación funcionaba correctamente 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 el chino, el alemán, el japonés y el ruso, a veces se mostrarán como caracteres indescifrables o como ? en la consola. Por ejemplo:

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

Comportamiento nuevo

A partir de .NET 7 (versión 7.0.3xx) y .NET 8, los caracteres se representan correctamente. Tanto la codificación como 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 variable de entorno DOTNET_CLI_FORCE_UTF8_ENCODING).

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 obtener más información, consulte El SDK ya no cambia la codificación de la consola tras la finalización.

Versión introducida

7.0.3xx de .NET 8, versión preliminar 1

Tipo de cambio importante

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 inglés proporciona una experiencia deficiente.

Los desarrolladores que aún no usaban las variables VSLANG 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 en primer lugar debido a caracteres indescifrables. Además, solo los desarrolladores que usan Windows 10 o versiones posteriores podrían verse afectados, la mayoría de los cuales probablemente usan 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 quiere usar una consola heredada o tiene problemas de compilación u otros debido al cambio de codificación, anule VSLANG y DOTNET_CLI_UI_LANGUAGE para deshabilitar este cambio.

Consulte también