【问题标题】:Swift get HTML from URLSwift 从 URL 获取 HTML
【发布时间】:2015-12-09 10:57:01
【问题描述】:

我正在尝试从 URL 获取和打印 HTML。这是我的做法(使用 Swift 2):

let testUrl = NSURL(string: "https://www.google.com")
var html = NSString()
do {
    html = try NSString(contentsOfURL: testUrl!, encoding: NSUTF8StringEncoding)
} catch{print(error)}
print(html)

并在控制台打印以下错误:

Error Domain=NSCocoaErrorDomain Code=261 "无法使用文本编码 Unicode (UTF-8) 打开文件。" UserInfo={NSURL=https://www.google.com, NSStringEncoding=4}

有什么想法吗?

【问题讨论】:

  • 哦,nvm,将encoding: NSUTF8StringEncoding 更改为encoding: NSASCIIStringEncoding 解决它:)
  • stackoverflow.com/questions/26453711/… 这家伙也有类似的错误。
  • 能否请您提及您使用的 xcode 版本
  • @AlexLing:NSASCIIStringEncoding 不能表示任何非 ASCII 字符。所以即使它没有崩溃,NSASCIIStringEncoding 几乎总是一个糟糕的选择。
  • @jamil65able 我正在使用 Xcode 7.0 GM

标签: html ios swift swift2


【解决方案1】:

Swift 5 解决方案:

try! String(contentsOf: URL(string: "https://www.google.com"), encoding: .utf16)

【讨论】:

    【解决方案2】:

    Swift 3 解决方案:

    do {
    
    html = try NSString(contentsOf: url, encoding: String.Encoding.isoLatin1.rawValue)
    
    } catch let error {
    
      print(error)
    
    }
    

    【讨论】:

      【解决方案3】:

      似乎 www.google.com 使用 ISO 8859-1 encoding,对应的NSString编码为NSISOLatin1StringEncoding

      html = try NSString(contentsOfURL: testUrl!, encoding: NSISOLatin1StringEncoding)
      

      您还可以自动检测 HTTP 响应编码, 参见例如https://stackoverflow.com/a/32051684/1187415

      【讨论】:

      • 感谢您的回答,它可以工作,但是当我尝试另一个像 google.com/search?q=%20site:%20stackoverflow.com 这样的网址时,我收到一个错误,提示无法打开文件“搜索”。我尝试了不同的编码,但它们都不起作用。
      • @AlexLing: let testUrl = NSURL(string: "https://www.google.com/search?q=%20site:%20stackoverflow.com") 与 NSISOLatin1StringEncoding 对我有用。错误消息 “无法打开“搜索”文件” 对我来说似乎与编码无关。
      • 救了我的命!!!!我试图将 .svg 图像下载为字符串并将其保存以显示在 WKWebView 中,即使用户处于脱机状态。这终于解决了问题。
      猜你喜欢
      • 2016-12-15
      • 2017-06-29
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 2016-04-17
      • 2017-10-03
      相关资源
      最近更新 更多