尝试使用 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:)
,这可能会阻塞主线程,并可能导致你的应用程序被拒绝。
我使用此代码获取 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:)
,这可能会阻塞主线程,并可能导致你的应用程序被拒绝。