CLI 主控台輸出使用 UTF-8

如果已設定 DOTNET_CLI_UI_LANGUAGEVSLANG 環境變數,.NET CLI 主控台的輸出和輸入編碼會變更為 UTF-8,讓字碼頁一同變更為 UTF-8。 這個新行為可讓這些環境變數所設定的語言字元正確轉譯。

這項變更只會影響 Windows 作業系統 (其他平台上的編碼沒有此問題)。 此外,此變更僅適用於使用者所設定 UI 文化特性為非英文的 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 10 1909 之前的 Windows 版本不支援 UTF-8,而且在這項變更之後可能會遇到問題。 (從 .NET 8 和 .NET 7.0.300 SDK 開始,根據預設,.NET SDK 不再將這些版本的編碼變更為 UTF-8。若要在不支援 UTF-8 的 Windows 10 版本上選擇使用 UTF-8,請使用 DOTNET_CLI_FORCE_UTF8_ENCODING 環境變數。)

此外,有一個現有的錯誤導致在 SDK 完成執行之後,SDK 可能會影響在相同命令提示字元中呼叫的其他命令和程式編碼。 由於現在 SDK 更頻繁地變更編碼方式,這個錯誤的影響可能會擴大。 不過,Bug 已在 .NET 8 和 .NET 7.0.300 SDK 中修正。 如需詳細資訊,請參閱 SDK 在完成之後不再變更控制台編碼

導入的版本

7.0.3xx .NET 8 Preview 1

中斷性變更的類型

這項變更會影響來源相容性二進位相容性。 這也是行為變更

變更原因

使用非英文語言的 .NET CLI 的體驗不佳。

尚未使用 VSLANGDOTNET_CLI_UI_LANGUAGE 變數的開發人員不會受到影響。 由於亂碼,此語言設置一開始就無法正常運作,因此影響應該很小。 此外,只有使用 Windows 10 或更新版本的開發人員才可能受到影響,其中大多數使用的應該是 1909 版或更新版本。

舊版案例已不太可能支援這個已中斷的語言,因此您不太可能想要使用另一種可能公開此中斷的語言。

  • 如果您使用舊版的 Windows 10,請升級至 1909 版或更新版本。
  • 如果您想要使用舊版主控台,或因為編碼變更而遇到組建問題或其他問題,請取消設定 VSLANGDOTNET_CLI_UI_LANGUAGE 以停用這項變更。

另請參閱