* نسخة ألموفير: 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)
}
}
نتائج:
Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.stringSerializationFailed(Unicode (UTF-8)))
كما هو موضح في وصف الخطأ ، لم يتمكن 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 :)
اضحك
شكرا لك حفظت يومي ؛-)
التعليق الأكثر فائدة
ghost واجهت نفس المشكلة
لقد قمت بحل المشكلة باستخدام
.responseData
&String(decoding:as:)
لاحظ أن String (data: encoding :) أسرع من String (فك التشفير: as :)
المرجع:
https://bugs.swift.org/browse/SR-6261