Ios 为什么该网站在Swift URLSession中无法转换为UTF8?
以下代码失败:Ios 为什么该网站在Swift URLSession中无法转换为UTF8?,ios,swift,utf-8,nsurlsession,urlsession,Ios,Swift,Utf 8,Nsurlsession,Urlsession,以下代码失败: let url = URL(string: "https://www.cardboardconnection.com/1987-topps-baseball-cards")! var request = URLRequest(url: url) request.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type") request
let url = URL(string: "https://www.cardboardconnection.com/1987-topps-baseball-cards")!
var request = URLRequest(url: url)
request.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
request.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Accept")
let task = URLSession.shared.dataTask(with: request) {(data, response, error) in
guard let data = data else { return }
print(String(data: data, encoding: .utf8)!)
}
task.resume()
我不知道这个网站的具体原因是什么导致它在UTF8转换上失败。我怎么知道呢?什么是正确的转换?只是想从页面中获取原始HTML。使用
这将显示具有无效UTF-8的两行。这里的技巧是
只匹配合法解码的字符
下面的方法很有效,但我觉得我错过了更简单的方法
var codeUnits: [UTF32.CodeUnit] = []
let sink = { codeUnits.append($0) }
if transcode(data.makeIterator(), from: UTF8.self, to: UTF32.self,
stoppingOnError: false, into: sink) {
let string = String(codeUnits.compactMap { UnicodeScalar($0) }.map(String.init).joined())
print(string)
}
另请参见,Martin R以更好的方式解决了这一问题(尽管它仍然不简单)。尝试
windowsCP1254
encoding为什么使用这种特定的编码?您想知道如何根据返回的数据检测字符串编码吗?是的,我想知道从my添加扩展名,然后从URLSession.shared.dataTask添加扩展名(with:cardboardconnectionURL){(数据,响应,错误)在guard中let data=data,let encoding=data.stringEncoding else{return}print(“encoding:”,encoding.rawValue)如果let string=string(data:data,encoding:encoding){print(string)}.resume()
Wow谢谢!我将接受目前有效的方法。
var codeUnits: [UTF32.CodeUnit] = []
let sink = { codeUnits.append($0) }
if transcode(data.makeIterator(), from: UTF8.self, to: UTF32.self,
stoppingOnError: false, into: sink) {
let string = String(codeUnits.compactMap { UnicodeScalar($0) }.map(String.init).joined())
print(string)
}