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ę.
Zalecana akcja
- 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
iDOTNET_CLI_UI_LANGUAGE
wyłączenie tej zmiany.