Udostępnij za pośrednictwem


Dane wyjściowe konsoli interfejsu wiersza polecenia używają protokołu UTF-8

Jeśli zmienna DOTNET_CLI_UI_LANGUAGE środowiskowa lub VSLANG jest ustawiona, dane wyjściowe konsoli interfejsu wiersza polecenia platformy .NET i kodowanie wejściowe zmieni się na UTF-8, aby strona kodowa mogła również zmienić wartość na UTF-8. To nowe zachowanie umożliwia poprawne renderowanie znaków z języków ustawionych przez te zmienne środowiskowe.

Ta zmiana dotyczy tylko systemów operacyjnych Windows (kodowanie było w porządku na innych platformach). Ponadto dotyczy tylko systemu Windows 10 i nowszych wersji, w których kultura interfejsu użytkownika ustawiona przez użytkownika jest nieanglojęzyczna.

Poprzednie zachowanie

Znaki w niektórych językach, w tym w języku chińskim, niemieckim, japońskim i rosyjskim, czasami są wyświetlane jako zwijone znaki lub jak ? w konsoli programu . Na przykład:

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

Nowe zachowanie

Począwszy od platformy .NET 7 (wersja 7.0.3xx) i .NET 8, znaki są renderowane poprawnie. Zarówno kodowanie, jak i strona kodowa zmieniają się. Na przykład:

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

Wersje systemu Windows starsze niż Windows 10 1909 nie obsługują w pełni utF-8 i mogą wystąpić problemy po tej zmianie. (Począwszy od zestawu .NET 8 i .NET 7.0.300 SDK, zestaw .NET SDK nie zmienia już kodowania na UTF-8 w tych wersjach. Aby wrócić do korzystania z utF-8 nawet w wersjach systemu Windows 10, które nie obsługują go, użyj zmiennej środowiskowej DOTNET_CLI_FORCE_UTF8_ENCODING .

Ponadto wystąpiła istniejąca usterka polegająca na tym, że zestaw SDK może wpływać na kodowanie innych poleceń i programów wywoływanych w tym samym wierszu polecenia po zakończeniu wykonywania zestawu SDK. Teraz, gdy zestaw SDK częściej zmienia kodowanie, wpływ tej usterki może wzrosnąć. Usterka została jednak usunięta w zestawach .NET 8 i .NET 7.0.300 SDK. Aby uzyskać więcej informacji, zobacz Zestaw SDK nie zmienia już kodowania konsoli po zakończeniu.

Wprowadzona wersja

7.0.3xx .NET 8 (wersja zapoznawcza 1)

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność źródła i zgodność binarną. Jest to również zmiana behawioralna.

Przyczyna wprowadzenia zmiany

Korzystanie z interfejsu wiersza polecenia platformy .NET w językach innych niż angielskie zapewnia słabe środowisko.

Deweloperzy, którzy nie używali jeszcze zmiennych VSLANG i DOTNET_CLI_UI_LANGUAGE nie mają wpływu na te zmienne. Wpływ powinien być minimalny, ponieważ to ustawienie języka nie działało dobrze w pierwszej kolejności z powodu niezwiązanych znaków. Ponadto może to mieć wpływ tylko na deweloperów korzystających z systemu Windows 10 lub nowszego, z których większość prawdopodobnie korzysta z wersji 1909 lub nowszej.

Starsze scenariusze są już mniej prawdopodobne, aby obsługiwać uszkodzone języki, więc jest mało prawdopodobne, że chcesz użyć innego języka, który może mimo to ujawnić tę przerwę.

  • Jeśli używasz starszej wersji systemu Windows 10, przeprowadź uaktualnienie do wersji 1909 lub nowszej.
  • Jeśli chcesz użyć starszej konsoli lub masz problemy z kompilacją lub inne ze względu na zmianę kodowania, usuń ustawienie VSLANG i DOTNET_CLI_UI_LANGUAGE wyłączenie tej zmiany.

Zobacz też