CLI コンソール出力での UTF-8 の使用

DOTNET_CLI_UI_LANGUAGE または VSLANG 環境変数が設定されている場合、.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 でエンコードが頻繁に変更されるようになったので、このバグの影響が大きくなるおそれがあります。 ただし、このバグは .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 を設定解除し、この変更を無効にします。

こちらもご覧ください