我观察到,使用 Visual Studio 2008(使用 .NET 3.5),Console.Out.Encoding
如果通过调试器和控制台应用程序/Windows 应用程序以下列方式运行,则更改的值如下:
- GUI 应用程序 - 使用调试器
- System.Text.SBCSCodePageEncoding
- GUI 应用程序 - 不使用调试器
- System.Text.UTF8Encoding
- 控制台应用程序 - 使用调试器
- System.Text.SBCSCodePageEncoding
- 控制台应用程序 - 不使用调试器
- System.Text.SBCSCodePageEncoding
现在 whenConsole.Out.Encoding
设置为SBCSCodePageEncoding
它不会在写入无效 utf16 代理项时引发异常。例如:
string invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate = '\uD81B'.ToString() + ";";
Console.WriteLine(invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate);
Console.Out.Flush();
但是,当Console.Out.Encoding
设置为System.Text.UTF8Encoding
写入无效的 utf16 代理时,它会抛出System.Text.EncoderFallbackException
.
我希望能够忽略 EncoderFallbackExceptions 而不必Console.Out
在我使用的大型 Windows 应用程序中的每次使用中添加一个 try catch 块。我怎样才能做到这一点?
- 更改为控制台应用程序不是可接受的解决方案。
- 以某种方式将 Console.Out.Encoding 更改为 SBCSCodePageEncoding 是一种可接受的解决方案。
- 我无法更改 Console.Out.Encoding.EncoderFallback,因为我得到以下异常
System.InvalidOperationException
“实例是只读的” - win32 函数 SetConsoleOutputCP 似乎对我的 GUI/Windows 应用程序没有影响。