IPAddress.TryParse,输入包含unicode

时间:2013-04-02 05:31:17

标签: c# .net unicode ip-address

根据MSDN http://msdn.microsoft.com/en-us/library/system.net.ipaddress.tryparse(v=vs.100).aspx,ipString不能包含Unicode字符,否则将抛出ArgumentException。

是否有人能够在本地控制台应用程序中重新编写,我尝试了多个unicode字符,但无法重现。

我们在某些服务器日志中看到了类似的错误:

  

无法编组:遇到不可映射的角色。但是无法记录哪个输入破坏了代码。

更新,堆栈跟踪的一部分: System.ArgumentExceptionMessage0:无法编组:遇到不可映射的字符。 ;在System.String.ConvertToAnsi(Int32 iMaxDBCSCharByteSize,Boolean fBestFit,Boolean fThrowOnUnmappableChar,Int32& cbLength) - 在System.StubHelpers.CSTRMarshaler.ConvertToNative(Int32 flags,String strManaged,IntPtr pNativeBuffer) - 在System.Net.UnsafeNclNativeMethods.OSSOCK .WSAStringToAddress(String addressString,AddressFamily addressFamily,IntPtr lpProtocolInfo,Byte [] socketAddress,Int32& socketAddressSize) - at System.Net.IPAddress.InternalParse(String ipString,Boolean tryParse) - at System.Net.IPAddress.TryParse(String ipString,IPAddress& address) -

1 个答案:

答案 0 :(得分:0)

MSDN评论有些奇怪(因为任何字符甚至1都是Unicode字符)...并且通常在输入无效文本时不会抛出TryParse。

您的错误似乎与编组有关(如“从托管代码调用COM对象”或“PInvoke某些本机代码”)。如果您确信来自TryParse的错误 - 最简单的方法可能是查看System.Dll中TryParse的实际实现,并尝试追溯哪些输入以及在什么环境中可能导致此类异常。

这是潜在的案例(带有俄语字符的类似IPv6的地址):

  System.Net.IPAddress.TryParse("ф:ф", out v);