【问题标题】:NSURL and russian domains [duplicate]NSURL 和俄罗斯域名 [重复]
【发布时间】:2016-09-08 12:58:05
【问题描述】:

这是一个问题,我找不到解决方案。在我的程序中,我尝试使用 url 打开 Safari,直到出现以下情况:我尝试将站点与俄罗斯主机和域链接,例如:

let url = "http://карта.рф"
UIApplication.sharedApplication().openURL(NSURL(string: url)!)

然后我有一个错误:

致命错误:在展开可选值时意外发现 nil

因此类 NSURL 不能在具有俄语符号的链接上创建对象。我尝试使用 url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())! 和类似的,但问题是它将所有“不正确”符号更改为其他符号,但有必要准确链接俄罗斯网站,在俄罗斯域名,这意味着 url-address 中没有真正不正确的字母。

我不认为 N​​SURL 不能与非英文符号一起使用。谁能帮我?

【问题讨论】:

  • @HamzaAnsari ,它只是相似,但并没有澄清我想要的一切。
  • @kennytm ,这绝对不是我需要的。

标签: swift nsurl cyrillic


【解决方案1】:

您需要与主机

相关的字符集
let string = "http://" + "карта.рф".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
let url = NSURL(string:string)

如果您还必须对 pathquery 进行编码,请使用 NSURLComponents 并分别对其他组件进行编码。

let components = NSURLComponents()
components.scheme = "http"
components.host = "карта.рф".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())

let url = components.URL!

【讨论】:

  • 我认为 Apple 希望我们现在使用 URLComponents。那些双斜杠也会破坏 url,因为它们也被编码了。
  • @vadian,这解决了问题,虽然通常的 print(url) 显示了 abracadabra,当然,但在 Safari 中这是正确的地址。
  • 我在第一个示例中更新了答案以保留http://
  • 总的来说,情况是用户输入了通常的字符串作为url地址,然后Safari尝试打开它。所以没有区分路径、查询、主机或其他。
  • @vadian,如我所见,除了组件编码之外没有任何变体?有没有办法转换整个字符串,就像我们将它复制粘贴到浏览器的搜索字段中一样?
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多