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

时间:2018-03-15 13:08:32

标签: html xcode utf-8 swift4 arabic

我使用此代码获取html内容,它适用于大多数网站..这段代码给了我下面的网站问题(我需要!)我不知道为什么! 代码给了我:

  

错误:错误域= NSCocoaErrorDomain代码= 261"无法使用Unicode(UTF-8)文本编码打开文件“d-0002.htm”。" UserInfo = {NSURL = http://www.mktbtk.com/dir/nab/2/d-0002.htm,NSStringEncoding = 4}

sudo su
sudo npm install

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

1 个答案:

答案 0 :(得分:0)

您显示的页面以此标题回复:

  

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:),这可能会阻止主线程,并可能导致你的应用被拒绝。