0

根据 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)-- 在 System.Net.IPAddress.InternalParse(String ipString, Boolean tryParse)-- 在 System.Net.IPAddress.TryParse(String ipString, IP地址&地址)--

4

1 回答 1

0

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

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

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

  System.Net.IPAddress.TryParse("ф:ф", out v);
于 2013-04-02T05:49:20.600 回答