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

Creado en 26 dic. 2017  ·  3Comentarios  ·  Fuente: Alamofire/Alamofire

* Versión de Alamofire: 4.4.0* Versión de Xcode: 8.3.2
* Versión Swift: Apple Swift versión 3.1 (swiftlang-802.0.53 clang-802.0.42)* Plataforma (s) que ejecutan Alamofire: cualquier simulador (xcode 8.3.2)

Hola, ¿alguien podría echarme una mano para resolver esto? Gracias.

Estoy haciendo dos solicitudes html diferentes con Alamofire, ambas funcionan bien con un navegador y devuelven la misma fuente html, sin embargo, al usar Alamofire, una de ellas no puede decodificar la respuesta de datos a la cadena.
Observe que la pequeña diferencia en las URL es que la segunda URL tiene una "n" al final.

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

Resultados:

  • urlString1 recupera la cadena html correctamente
  • urlString2 imprime error:
    Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
support

Comentario más útil

@ghost me encuentro con el mismo problema

Resolví usando .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)
    }

Observó que String (data: encoding :) es más rápido que String (decoding: as :)

Árbitro:
https://bugs.swift.org/browse/SR-6261

Todos 3 comentarios

Como dice la descripción del error, Alamofire no pudo analizar la cadena como UTF-8 (a pesar de que eso es lo que dictionary.com devuelve de forma predeterminada). Debe investigar si su respuesta es realmente una cadena UTF-8 válida. Si no se puede contar con que el sitio devuelva un tipo adecuado, es posible que desee escribir su propio analizador de cadenas que pueda recurrir a otras codificaciones.

@ghost me encuentro con el mismo problema

Resolví usando .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)
    }

Observó que String (data: encoding :) es más rápido que String (decoding: as :)

Árbitro:
https://bugs.swift.org/browse/SR-6261

@ gaplo917
gracias me salvaste el día ;-)

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

solomon23 picture solomon23  ·  3Comentarios

Tulleb picture Tulleb  ·  3Comentarios

hengchengfei picture hengchengfei  ·  3Comentarios

matthijsotterloo picture matthijsotterloo  ·  3Comentarios

tobiasoleary picture tobiasoleary  ·  3Comentarios