Поделиться через


Выходные данные консоли CLI используют UTF-8

DOTNET_CLI_UI_LANGUAGE Если задана переменная среды, VSLANG выходные данные консоли .NET CLI и кодировка входных данных изменяются в UTF-8, чтобы кодовая страница также меняется на UTF-8. Это новое поведение позволяет правильно отображать символы из языков, заданных этими переменными среды.

Это изменение влияет только на операционные системы Windows (кодировка была нормальной на других платформах). Кроме того, она применяется только к Windows 10 и более поздним версиям, где язык и региональные параметры пользовательского интерфейса, заданные пользователем, не являются английскими.

Прежнее поведение

Символы на определенных языках, в том числе китайский, немецкий, японский и русский, иногда отображаются в виде символов или как ? в консоли. Например:

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

Новое поведение

Начиная с .NET 7 (версия 7.0.3xx) и .NET 8 символы отображаются правильно. Кодирование и изменение кодовой страницы. Например:

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

Версии Windows старше Windows 10 1909 не полностью поддерживают UTF-8 и могут возникнуть проблемы после этого изменения. (Начиная с пакета SDK для .NET 8 и .NET 7.0.300 пакет SDK для .NET больше не изменяет кодировку на UTF-8 в этих версиях по умолчанию. Чтобы вернуться к использованию UTF-8 даже в версиях Windows 10, которые не поддерживают его, используйте DOTNET_CLI_FORCE_UTF8_ENCODING переменную среды.)

Кроме того, возникла ошибка , из-за которой пакет SDK может повлиять на кодировку других команд и программ, вызываемых в той же командной строке после завершения выполнения пакета SDK. Теперь, когда пакет SDK чаще изменяет кодировку, влияние этой ошибки может увеличиться. Однако исправлена ошибка в пакете SDK для .NET 8 и .NET 7.0.300. Дополнительные сведения см. в разделе SDK, который больше не изменяет кодировку консоли после завершения.

Представленные версии

7.0.3xx .NET 8( предварительная версия 1)

Тип критического изменения

Это изменение может повлиять на совместимость исходного кода и совместимость на уровне двоичного кода. Это также изменение поведения.

Причина изменения

Использование .NET CLI на языках, отличных от английского языка, обеспечивает плохой интерфейс.

Разработчики, которые еще не использовали VSLANG переменные, DOTNET_CLI_UI_LANGUAGE не влияют. Влияние должно быть минимальным, так как этот языковой параметр не работал бы хорошо в первую очередь из-за вязки символов. Кроме того, могут повлиять только разработчики, использующие Windows 10 или более поздней версии, большинство из которых, скорее всего, используют версию 1909 или более позднюю.

Устаревшие сценарии уже менее вероятны для поддержки неработающих языков, поэтому вряд ли вы хотите использовать другой язык, который может в любом случае предоставить этот разрыв.

  • Если вы используете старую версию Windows 10, обновите ее до версии 1909 или более поздней.
  • Если вы хотите использовать устаревшую консоль или сталкиваются с проблемами сборки или другими из-за изменения кодирования, отмены установки VSLANG и DOTNET_CLI_UI_LANGUAGE отключения этого изменения.

См. также