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

Dibuat pada 26 Des 2017  ·  3Komentar  ·  Sumber: Alamofire/Alamofire

*Versi Alamofire: 4.4.0* Versi Xcode: 8.3.2
*Versi cepat: Apple Swift versi 3.1 (swiftlang-802.0.53 dentang-802.0.42)* Platform yang menjalankan Alamofire: Simulator apa pun (xcode 8.3.2)

Hai, bisakah seseorang membantu saya mencari tahu ini. Terima kasih.

Saya melakukan dua permintaan html yang berbeda dengan Alamofire, keduanya berfungsi dengan baik menggunakan browser dan mengembalikan sumber html yang sama, namun menggunakan Alamofire salah satunya gagal memecahkan kode respons data ke string.
Perhatikan perbedaan kecil di url adalah url kedua memiliki 'n' di akhir

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

Hasil:

  • urlString1 mengambil string html dengan baik
  • urlString2 mencetak kesalahan:
    Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
support

Komentar yang paling membantu

@ghost Saya mengalami masalah yang sama

Saya menyelesaikannya dengan menggunakan .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)
    }

Perhatikan bahwa String(data:encoding:) lebih cepat daripada String(decoding:as :)

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

Semua 3 komentar

Seperti yang dikatakan deskripsi kesalahan, Alamofire tidak dapat mengurai string sebagai UTF-8 (meskipun itu yang dikembalikan oleh dictionary.com secara default). Anda harus menyelidiki apakah respons mereka sebenarnya adalah string UTF-8 yang valid. Jika situs tidak dapat diandalkan untuk mengembalikan jenis yang tepat, Anda mungkin ingin menulis pengurai string Anda sendiri yang dapat mundur ke pengkodean lain.

@ghost Saya mengalami masalah yang sama

Saya menyelesaikannya dengan menggunakan .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)
    }

Perhatikan bahwa String(data:encoding:) lebih cepat daripada String(decoding:as :)

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

@gaplo917
terima kasih menyelamatkan hari saya ;-)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat