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

Erstellt am 26. Dez. 2017  ·  3Kommentare  ·  Quelle: Alamofire/Alamofire

*Alamofire-Version: 4.4.0* Xcode-Version: 8.3.2
*Swift-Version: Apple Swift-Version 3.1 (swiftlang-802.0.53 clang-802.0.42)* Plattform(en), auf denen Alamofire läuft: Jeder Simulator (xcode 8.3.2)

Hallo, könnte mir jemand helfen, das herauszufinden. Vielen Dank.

Ich mache zwei verschiedene HTML-Anfragen mit Alamofire, beide funktionieren mit einem Browser einwandfrei und geben dieselbe HTML-Quelle zurück.
Beachten Sie den kleinen Unterschied in den URLs, dass die zweite URL ein 'n' am Ende hat

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

Ergebnisse:

  • urlString1 holt HTML-String in Ordnung
  • urlString2 gibt Fehler aus:
    Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
support

Hilfreichster Kommentar

@ghost Ich habe das gleiche Problem

Ich habe mit .responseData & String(decoding:as:) solved gelöst

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

Beachten Sie, dass String(data:encoding:) schneller ist als String(decoding:as:)

Ref:
https://bugs.swift.org/browse/SR-6261

Alle 3 Kommentare

Wie die Fehlerbeschreibung sagt, konnte Alamofire den String nicht als UTF-8 parsen (obwohl dictionary.com standardmäßig zurückgibt). Sie sollten untersuchen, ob ihre Antwort tatsächlich eine gültige UTF-8-Zeichenfolge ist. Wenn man sich nicht darauf verlassen kann, dass die Site einen richtigen Typ zurückgibt, möchten Sie vielleicht Ihren eigenen String-Parser schreiben, der auf andere Codierungen zurückgreifen kann.

@ghost Ich habe das gleiche Problem

Ich habe mit .responseData & String(decoding:as:) solved gelöst

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

Beachten Sie, dass String(data:encoding:) schneller ist als String(decoding:as:)

Ref:
https://bugs.swift.org/browse/SR-6261

@gaplo917
Danke, du hast mir den Tag gerettet ;-)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen