*Alamofire 版本:4.4.0* Xcode 版本:8.3.2
*Swift 版本:Apple Swift 版本 3.1 (swiftlang-802.0.53 clang-802.0.42)*运行 Alamofire 的平台:任何模拟器(xcode 8.3.2)
嗨,有人可以帮我弄清楚这个。 谢谢。
我正在使用 Alamofire 执行两个不同的 html 请求,两者都可以使用浏览器正常工作并返回相同的 html 源,但是使用 Alamofire 其中之一无法将数据响应解码为字符串。
请注意url 的细微差别是第二个 url 末尾有一个“n”
let urlString1 = "http://www.dictionary.com/browse/andalusia"
let urlString2 = "http://www.dictionary.com/browse/andalusian"
Alamofire.request(urlString<1 or 2>).responseString { (response) in
switch response.result {
case .success(let value):
// Do something with html string
case .failure(let error):
print(error)
}
}
结果:
Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
就像错误描述所说的那样,Alamofire 无法将字符串解析为 UTF-8(尽管dictionary.com
是默认返回的)。 您应该调查他们的响应是否实际上是一个有效的 UTF-8 字符串。 如果不能指望站点返回正确的类型,那么您可能需要编写自己的字符串解析器,该解析器可以回退到其他编码。
@ghost我遇到了同样的问题
我通过使用.responseData
& String(decoding:as:)
Alamofire.request(...).responseData { response in
guard let data = response.data else { return }
let utf8Text = String(data: data, encoding: .utf8) ?? String(decoding: data, as: UTF8.self)
}
注意到 String(data:encoding:) 比 String(decoding:as:) 快
@gaplo917
谢谢你救了我的一天;-)
最有用的评论
@ghost我遇到了同样的问题
我通过使用
.responseData
&String(decoding:as:)
注意到 String(data:encoding:) 比 String(decoding:as:) 快
参考:
https://bugs.swift.org/browse/SR-6261