次の方法で共有


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 に変更しなくなりました。サポートされていない 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 を使用すると、エクスペリエンスが低下しました。

VSLANG変数とDOTNET_CLI_UI_LANGUAGE変数をまだ使用していない開発者は影響を受けません。 文字化けのため、この言語設定は最初はうまく機能しないため、影響は最小限に抑える必要があります。 また、Windows 10 以降を使用している開発者のみが影響を受ける可能性があり、そのほとんどはバージョン 1909 以降を使用している可能性があります。

従来のシナリオでは、サポートが不十分な言語を既にあまりサポートしていないため、この問題をさらに悪化させる可能性のある別の言語を使用することはほとんどないでしょう。

  • 古いバージョンの Windows 10 を使用している場合は、バージョン 1909 以降にアップグレードします。
  • レガシ コンソールを使用したい場合や、エンコード変更によりビルドなどの問題が生じている場合は、VSLANGDOTNET_CLI_UI_LANGUAGE の設定を解除してこの変更を無効にしてください。

こちらも参照ください