2013-04-02 39 views
0

根據MSDN http://msdn.microsoft.com/en-us/library/system.net.ipaddress.tryparse(v=vs.100).aspx,ipString不能包含Unicode字符,否則將拋出ArgumentException。IPAddress.TryParse帶有包含Unicode的輸入

是否有人能夠在本地控制檯應用程序再現,我試過多個unicode字符,但無法repro。

我們在一些服務器日誌中看到類似的錯誤:

無法名帥:遇到無法映射的字符。但無法記錄哪個輸入違反了代碼。

更新,堆棧跟蹤的一部分: System.ArgumentExceptionMessage0:不能元帥:遇到無法映射的字符。 ;在System.String.ConvertToAnsi(的Int32 iMaxDBCSCharByteSize,布爾fBestFit,布爾fThrowOnUnmappableChar,的Int32 & cbLength) - 在System.StubHelpers.CSTRMarshaler.ConvertToNative(的Int32標誌,字符串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地址&地址) -

+0

你嘗試哪個角色? –

回答

0

的MSDN評論實在有些怪異(如任何字符,甚至1是Unicode字符)......和一般的TryParse不應該拋出時,輸入無效的文本。

您的錯誤似乎與編組有關(如「從託管代碼調用COM對象」或「PInvoke一些本機代碼」)。如果您確信來自TryParse的錯誤 - 最簡單的方法可能是查看System.Dll中的TryParse的實際實現,並嘗試追溯哪些輸入和哪些環境會導致此類異常。

這裏是潛在的情況下(帶俄語字符的IPv6般的地址):

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

你給的案例不重複...我試過.net 2.0,3.5,4.0和Win7/Win2k8R2。 – daiwb