Alamofire: request.responseString - stringSerializationFailed(Unicode (UTF-8))

创建于 2017-12-26  ·  3评论  ·  资料来源: Alamofire/Alamofire

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

结果:

  • urlString1 可以很好地获取 html 字符串
  • urlString2 打印错误:
    Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
support

最有用的评论

@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:) 快

参考:
https://bugs.swift.org/browse/SR-6261

所有3条评论

就像错误描述所说的那样,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:) 快

参考:
https://bugs.swift.org/browse/SR-6261

@gaplo917
谢谢你救了我的一天;-)

此页面是否有帮助?
0 / 5 - 0 等级