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)
}