Freigeben über


CLI-Konsolenausgabe verwendet UTF-8

Wenn die Umgebungsvariable DOTNET_CLI_UI_LANGUAGE oder VSLANG festgelegt ist, ändern sich die .NET CLI-Konsolenausgabe und die Eingabecodierung zu UTF-8, damit die Codeseite ebenfalls zu UTF-8 gewechselt werden kann. Mit diesem neuen Verhalten können Zeichen aus Sprachen, die von diesen Umgebungsvariablen festgelegt werden, ordnungsgemäß gerendert werden.

Diese Änderung betrifft nur Windows-Betriebssysteme (die Codierung war auf anderen Plattformen in Ordnung). Darüber hinaus gilt es nur für Windows 10 und höhere Versionen, in denen die vom Benutzer festgelegte Benutzeroberflächenkultur nicht englisch ist.

Vorheriges Verhalten

Zeichen in bestimmten Sprachen, einschließlich Chinesisch, Deutsch, Japanisch und Russisch, würden manchmal als garblierte Zeichen oder wie ? in der Konsole angezeigt. Beispiel:

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

Neues Verhalten

Ab .NET 7 (Version 7.0.3xx) und .NET 8 werden Zeichen korrekt gerendert. Sowohl die Codierung als auch die Codepage ändern sich. Beispiel:

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

Windows-Versionen, die älter als Windows 10 1909 sind, unterstützen UTF-8 nicht vollständig und können nach dieser Änderung Probleme auftreten. (Ab .NET 8 und .NET 7.0.300 SDK ändert das .NET SDK die Codierung für diese Versionen standardmäßig nicht mehr in UTF-8. Verwenden Sie die Umgebungsvariable, um sich für die Verwendung von UTF-8 auch bei Windows 10-Versionen zu entscheiden, die DOTNET_CLI_FORCE_UTF8_ENCODING dies nicht unterstützen.)

Darüber hinaus gab es einen vorhandenen Fehler , bei dem sich das SDK auf die Codierung anderer Befehle und Programme auswirken kann, die in derselben Eingabeaufforderung aufgerufen werden, nachdem das SDK die Ausführung abgeschlossen hat. Da das SDK nun häufiger die Codierung ändert, kann sich die Auswirkung dieses Fehlers erhöhen. Der Fehler wurde jedoch in .NET 8 und .NET 7.0.300 SDK behoben. Weitere Informationen finden Sie unter SDK ändert die Konsolencodierung nach Abschluss nicht mehr.

Eingeführte Version

7.0.3xx .NET 8 Preview 1

Art der einschneidenden Änderung

Diese Änderung kann sich auf Quellkompatibilität und binäre Kompatibilität auswirken. Es ist auch eine Verhaltensänderung.

Grund für Änderung

Die Verwendung der .NET CLI in nicht englischen Sprachen bietet eine schlechte Erfahrung.

Entwickler, die die Variablen VSLANG und DOTNET_CLI_UI_LANGUAGE noch nicht verwendet haben, sind nicht betroffen. Da diese Spracheinstellung aufgrund von verzerrten Zeichen ohnehin nicht gut funktioniert hätte, sollte die Auswirkung minimal sein. Außerdem können nur Entwickler, die Windows 10 oder höher verwenden, betroffen sein, von denen die meisten wahrscheinlich Version 1909 oder höher verwenden.

Die Legacyszenarien neigen bereits weniger dazu, kaputte Sprachen zu unterstützen, daher ist es unwahrscheinlich, dass Sie eine andere Sprache verwenden könnten, die diesen Bruch ohnehin sichtbar macht.

  • Wenn Sie eine ältere Version von Windows 10 verwenden, führen Sie ein Upgrade auf Version 1909 oder höher durch.
  • Wenn Sie eine ältere Konsole verwenden möchten oder aufgrund der geänderten Codierung Probleme beim Erstellen haben, deaktivieren Sie die Einstellungen VSLANG und DOTNET_CLI_UI_LANGUAGE, um diese Änderung zu verhindern.

Siehe auch