From 9bf4f4457f7e9f0c07f5ddc7a339858400b504eb Mon Sep 17 00:00:00 2001 From: Gang Wang Date: Wed, 15 Oct 2025 03:12:12 +0000 Subject: [PATCH] Add the feature flag that allows users to opt out automatic UTF8 console encoding --- .../UILanguageOverride.cs | 23 +++++++++++-------- src/Cli/dotnet/Program.cs | 9 +++++--- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Cli/Microsoft.DotNet.Cli.Utils/UILanguageOverride.cs b/src/Cli/Microsoft.DotNet.Cli.Utils/UILanguageOverride.cs index d76b1ba6d8e8..f28c5b5a1cd4 100644 --- a/src/Cli/Microsoft.DotNet.Cli.Utils/UILanguageOverride.cs +++ b/src/Cli/Microsoft.DotNet.Cli.Utils/UILanguageOverride.cs @@ -25,19 +25,22 @@ public static void Setup() FlowOverrideToChildProcesses(language); } - if ( - !CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase) && + if (Environment.GetEnvironmentVariable("CONSOLE_USE_DEFAULT_ENCODING") != "1") + { + if ( + !CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase) && #if NET - OperatingSystemSupportsUtf8() + OperatingSystemSupportsUtf8() #else - CurrentPlatformIsWindowsAndOfficiallySupportsUTF8Encoding() + CurrentPlatformIsWindowsAndOfficiallySupportsUTF8Encoding() #endif - ) - { - // Setting both encodings causes a change in the CHCP, making it so we don't need to P-Invoke ourselves. - Console.OutputEncoding = s_defaultMultilingualEncoding; - Console.InputEncoding = s_defaultMultilingualEncoding; - // If the InputEncoding is not set, the encoding will work in CMD but not in Powershell, as the raw CHCP page won't be changed. + ) + { + // Setting both encodings causes a change in the CHCP, making it so we don't need to P-Invoke ourselves. + Console.OutputEncoding = s_defaultMultilingualEncoding; + Console.InputEncoding = s_defaultMultilingualEncoding; + // If the InputEncoding is not set, the encoding will work in CMD but not in Powershell, as the raw CHCP page won't be changed. + } } } diff --git a/src/Cli/dotnet/Program.cs b/src/Cli/dotnet/Program.cs index cd82a15330f4..91f78339fd74 100644 --- a/src/Cli/dotnet/Program.cs +++ b/src/Cli/dotnet/Program.cs @@ -31,10 +31,13 @@ public static int Main(string[] args) { using AutomaticEncodingRestorer _ = new(); - // Setting output encoding is not available on those platforms - if (UILanguageOverride.OperatingSystemSupportsUtf8()) + if (Environment.GetEnvironmentVariable("CONSOLE_USE_DEFAULT_ENCODING") != "1") { - Console.OutputEncoding = Encoding.UTF8; + // Setting output encoding is not available on those platforms + if (UILanguageOverride.OperatingSystemSupportsUtf8()) + { + Console.OutputEncoding = Encoding.UTF8; + } } DebugHelper.HandleDebugSwitch(ref args);