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

Créé le 26 déc. 2017  ·  3Commentaires  ·  Source: Alamofire/Alamofire

*Version Alamofire : 4.4.0* Version Xcode : 8.3.2
*Version Swift : Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)* Plate-forme(s) exécutant Alamofire : n'importe quel simulateur (xcode 8.3.2)

Bonjour, quelqu'un pourrait-il me donner un coup de main pour résoudre ce problème. Merci.

Je fais deux requêtes html différentes avec Alamofire, les deux fonctionnent bien avec un navigateur et renvoient la même source html, mais en utilisant Alamofire, l'une d'entre elles ne parvient pas à décoder la réponse des données à la chaîne.
Notez que la petite différence dans les URL est que la deuxième URL a un "n" à la fin

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

Résultats:

  • urlString1 récupère correctement la chaîne html
  • urlString2 affiche l'erreur :
    Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
support

Commentaire le plus utile

@ghost je rencontre le même problème

J'ai résolu en utilisant .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)
    }

A noté que String(data:encoding:) est plus rapide que String(decoding:as:)

Réf :
https://bugs.swift.org/browse/SR-6261

Tous les 3 commentaires

Comme le dit la description de l'erreur, Alamofire n'a pas pu analyser la chaîne en UTF-8 (bien que ce soit ce que dictionary.com renvoie par défaut). Vous devez vérifier si leur réponse est en fait une chaîne UTF-8 valide. Si l'on ne peut pas compter sur le site pour renvoyer un type approprié, alors vous voudrez peut-être écrire votre propre analyseur de chaîne qui peut se replier sur d'autres encodages.

@ghost je rencontre le même problème

J'ai résolu en utilisant .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)
    }

A noté que String(data:encoding:) est plus rapide que String(decoding:as:)

Réf :
https://bugs.swift.org/browse/SR-6261

@gaplo917
merci tu m'as sauvé la journée ;-)

Cette page vous a été utile?
0 / 5 - 0 notes