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

تم إنشاؤها على ٢٦ ديسمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: 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، سواء تعمل بشكل جيد باستخدام المتصفح وإعادة مصدر أتش تي أم أل نفسه، ومع ذلك باستخدام 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 (فك التشفير: 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 (فك التشفير: as :)

المرجع:
https://bugs.swift.org/browse/SR-6261

اضحك
شكرا لك حفظت يومي ؛-)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات