Unicode URL = 无法初始化类型为“Foundation.NSUrl”的实例:本机“initWithString:”

6 xamarin.ios xamarin

我试图在 UIWebView 中打开一个包含 unicode 字符的 url:

var jrURL = new NSURL("http://???.gr");
Run Code Online (Sandbox Code Playgroud)

结果是:

Could not initialize an instance of the type 'Foundation.NSUrl': 
the native 'initWithString:' method returned nil.
It is possible to ignore this condition by setting
MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure to false.
Run Code Online (Sandbox Code Playgroud)

像https://Google.com 这样的工作正常

Yas*_*adi 7

var jrURL = new NSURL(new System.Uri("http://???.gr").AbsoluteUri);
Run Code Online (Sandbox Code Playgroud)

简单!(-:


Sus*_*ver 5

IDN 域名如:

\n\n\n\n

必须进行转换(基于 punycode)才能与以下命令一起使用NSUrl:

\n\n\n\n

国际化域名: https: //en.wikipedia.org/wiki/Internationalized_domain_name

\n\n

Punycode: https: //en.wikipedia.org/wiki/Punycode

\n\n

您可以使用System.Globalization.IdnMapping将您的域名转换为and \n此命名空间/类在和Punycode中可用。Xamarin.iOSXamarin.Android

\n\n
var idn = new System.Globalization.IdnMapping ();\nvar dotnetURI = new System.Uri ("http://\xce\xb4\xcf\x80\xce\xb8.gr);\nConsole.WriteLine (dotnetURI.ToString());\nNSUrl nsURL = new NSUrl (dotnetURI.Scheme, idn.GetAscii (dotnetURI.DnsSafeHost), dotnetURI.PathAndQuery);\nConsole.WriteLine (nsURL.ToString());\nWebView.LoadRequest(new NSUrlRequest(nsURL));\n
Run Code Online (Sandbox Code Playgroud)\n\n

MSDN IdnMapping.GetAscii:https://msdn.microsoft.com/en-us/library/system.globalization.idnmapping.getascii (v=vs.110).aspx

\n\n

注意: System.Uri.IdnHost处理 punycode 转换是 .Net 4.6 的一部分,目前在 Xamarin 的System命名空间中不可用

\n\n

参考: https: //msdn.microsoft.com/en-us/library/system.uri.idnhost (v=vs.110).aspx

\n