1

私は、Visual Studio 2008 (.NET 3.5 を使用) を使用してConsole.Out.Encoding、次の方法でデバッガーとコンソール アプリ/Windows アプリを介して実行する場合に基づいて値が変化することを観察しました。

  • GUI アプリ - デバッガーの使用
    • System.Text.SBCSCodePageEncoding
  • GUI アプリ - デバッガーを使用しない
    • System.Text.UTF8Encoding
  • コンソール アプリ - デバッガーの使用
    • System.Text.SBCSCodePageEncoding
  • コンソール アプリ - デバッガーを使用しない
    • System.Text.SBCSCodePageEncoding

Console.Out.Encodingに設定すると、無効なutf16SBCSCodePageEncodingサロゲートが書き込まれたときに例外がスローされなくなりました。例えば:

string invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate = '\uD81B'.ToString() + ";";
Console.WriteLine(invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate);
Console.Out.Flush();

ただし、無効な utf16 サロゲートを書き込むようConsole.Out.Encodingに設定すると、 がスローされます。System.Text.UTF8EncodingSystem.Text.EncoderFallbackException

Console.Out私が使用している大規模な Windows アプリケーションで使用するたびに try catch ブロックを追加しなくても、EncoderFallbackExceptions を無視できるようにしたいと考えています。これどうやってするの?

  1. コンソール アプリに変更することは、受け入れられる解決策ではありません。
  2. どういうわけか、Console.Out.Encoding を SBCSCodePageEncoding に変更することは、受け入れられる解決策です。
  3. System.InvalidOperationException「インスタンスは読み取り専用です」という例外が発生するため、Console.Out.Encoding.EncoderFallback を変更できません。
  4. Win32 関数 SetConsoleOutputCP は、GUI/Windows アプリに影響を与えないようです。
4

1 に答える 1