尝试使用 Swift 4 使用 uft8 编码 HTML 页面时出错

getting error when trying to encode HTML page with uft8 using Swift 4

我使用此代码获取 html 内容并且它适用于大多数网站..此代码让我无法访问下面的网站(我需要!)我不知道为什么! 代码给了我:

Error: Error Domain=NSCocoaErrorDomain Code=261 "The file “d-0002.htm” couldn’t be opened using text encoding Unicode (UTF-8)." UserInfo={NSURL=http://www.mktbtk.com/dir/nab/2/d-0002.htm, NSStringEncoding=4}

let myURLString = "http://www.mktbtk.com/dir/nab/2/d-0002.htm"

guard let myURL = URL(string: myURLString) else {
        print("Error: \(myURLString) doesn't seem to be a valid URL")
        return
    }

    do {
        let myHTMLString = try String(contentsOf: myURL, encoding: .utf8)
        print("HTML : \(myHTMLString)")
    } catch let error {
        print("Error: \(error)")
    }

注意:当我使用 ascii 编码时它有效..但是内容是阿拉伯语所以我需要 utf8..任何人都可以帮助

您显示的页面对此做出响应header:

Content-Type: text/html; charset=windows-1256

不是UTF-8,而是Windows-1256。

有准备:

extension String.Encoding {
    static let windows1256 = String.Encoding(rawValue:
        CFStringConvertEncodingToNSStringEncoding(
            CFStringEncoding(CFStringEncodings.windowsArabic.rawValue)
        )
    )
}

并使用 .windows1256 而不是 .utf8:

let myURLString = "http://www.mktbtk.com/dir/nab/2/d-0002.htm"

guard let myURL = URL(string: myURLString) else {
    print("Error: \(myURLString) doesn't seem to be a valid URL")
    return
}

do {
    let myHTMLString = try String(contentsOf: myURL, encoding: .windows1256) //<- not .utf8
    print("HTML : \(myHTMLString)")
} catch let error {
    print("Error: \(error)")
}

我不懂阿拉伯语,所以我不确定这是否真的是正确的解决方案。但我相信这值得一试。


顺便说一句,你不应该在主线程中使用String.init(contentsOf:encoding:),这可能会阻塞主线程,并可能导致你的应用程序被拒绝。