C# 当Console.Out.Encoding为UTF8时,如何忽略无效utf16代理引起的encoderCallbackException?
我观察到,使用Visual studio 2008(使用.NET 3.5)时,C# 当Console.Out.Encoding为UTF8时,如何忽略无效utf16代理引起的encoderCallbackException?,c#,unicode,utf-16,console-output,C#,Unicode,Utf 16,Console Output,我观察到,使用Visual studio 2008(使用.NET 3.5)时,Console.Out.Encoding的值会根据通过调试器和控制台应用程序/Windows应用程序以以下方式运行的if而变化: GUI应用程序-使用调试器 System.Text.SBCSCodePageEncoding GUI应用程序-不使用调试器 System.Text.utf8编码 控制台应用程序-使用调试器 System.Text.SBCSCodePageEncoding 控制台应用程序-不使用
Console.Out.Encoding
的值会根据通过调试器和控制台应用程序/Windows应用程序以以下方式运行的if而变化:
- GUI应用程序-使用调试器
- System.Text.SBCSCodePageEncoding
- GUI应用程序-不使用调试器
- System.Text.utf8编码
- 控制台应用程序-使用调试器
- System.Text.SBCSCodePageEncoding
- 控制台应用程序-不使用调试器
- System.Text.SBCSCodePageEncoding
Console.Out.Encoding
设置为SBCSCodePageEncoding
时,当向其写入无效的utf16代理时,不会引发异常。例如:
string invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate = '\uD81B'.ToString() + ";";
Console.WriteLine(invalidStringContiaingHighOrderSurrogateWithOutMatchingLowOrderSurrogate);
Console.Out.Flush();
但是,当Console.Out.Encoding
设置为System.Text.UTF8Encoding
向其写入无效的utf16代理时,将抛出System.Text.encoderCallbackException
我希望能够忽略EncoderCallbackExceptions,而不必在我使用的大型windows应用程序中每次使用Console.Out
时都添加try-catch块。我该怎么做
System.InvalidOperationException
“实例为只读”UTF8Encoding
,设置一个适当的值,例如…)使用属性来设置您想要的编码
(就我个人而言,我会坚持使用UTF-8,但创建一个
UTF8Encoding
,设置一个适当的值,例如…)这不是只适用于控制台应用程序还是我做错了什么?Console.outpunecoding=新的UTF8Encoding();对Windows/GUI应用程序抛出IOException“句柄无效”。这很奇怪。我想这取决于您希望如何处理GUI应用程序中的控制台输出。是否只想将其放在VS的输出窗口中?是的,当在调试器中运行时,输出将用于VS(输出/调试窗口或中间窗口,具体取决于开发人员的设置)-我想我可以在Console.WriteLines之前添加IsDebuggerAttached调用,但这只比在try-catch块中包装好一点。请注意,控制台中的编码更改是在.NET 4.0和.NET 4.5中进行的(这些版本也在您链接的第一页的备注部分中提到)。我认为海报使用了.NET3.5。不确定这是否相关。是的-使用.NET3.5,我将更新问题以明确这一点。谢谢,这不是只适用于控制台应用吗?还是我做错了什么?Console.outpunecoding=新的UTF8Encoding();对Windows/GUI应用程序抛出IOException“句柄无效”。这很奇怪。我想这取决于您希望如何处理GUI应用程序中的控制台输出。是否只想将其放在VS的输出窗口中?是的,当在调试器中运行时,输出将用于VS(输出/调试窗口或中间窗口,具体取决于开发人员的设置)-我想我可以在Console.WriteLines之前添加IsDebuggerAttached调用,但这只比在try-catch块中包装好一点。请注意,控制台中的编码更改是在.NET 4.0和.NET 4.5中进行的(这些版本也在您链接的第一页的备注部分中提到)。我认为海报使用了.NET3.5。不确定这是否相关。是的-使用.NET3.5,我将更新问题以明确这一点。谢谢