* 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で2つの異なるhtmlリクエストを実行しています。どちらもブラウザを使用して正常に動作し、同じhtmlソースを返しますが、Alamofireを使用すると、そのうちの1つが文字列へのデータ応答のデコードに失敗します。
URLのわずかな違いは、2番目の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(decoding:as :)よりも高速であることに注意してください。
@ gaplo917
私の日を救ってくれてありがとう;-)
最も参考になるコメント
@ghost私は同じ問題に遭遇します
.responseData
とString(decoding:as:)
を使用して解決しましたString(data:encoding :)はString(decoding:as :)よりも高速であることに注意してください。
参照:
https://bugs.swift.org/browse/SR-6261