ASIHTTPRequestからAFNetworkingに切り替えました。
私のアプリでは、ユーザーが検索語を入力できるようにしてから、サーバー(rails)にAPI呼び出しを行って、電話に表示する関連オブジェクトのリストを取得します。十分に単純です。
長すぎる、読まない
ASIライブラリを使用すると、サーバーに送信される検索語はのようになりますst%20helena
。これで、AFNetworkingを使用すると、サーバーに送信される検索語はですst%2520helena
。奇妙なことに、これは実際に違いを生んでいます。で%20
、結果が得られません。で%2520
、期待していた結果が得られます。
私の質問は、なぜこれが違いを生むのかということです。%2520
これはエンコードされた'%' + 20であり、空白文字に等しいことを知っています。これは、私の考えでは、を渡すことと同じである必要があります%20
。
詳細
以前は、最初にURLをエンコードした後、URLに検索語を追加するだけでした。
NSString *encoded = [@"st helena" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *url = [NSString stringWithFormat:@"http://www.example.com/?=%@, encoded];
ここで、AFNetworkingを使用して、NSDictionaryをのparameters
引数に渡しますAFHTTPClient#getPath
。
NSString *encoded = [@"st helena" stringByAddingPercentEscapesUsingEncoding:NSUTR8StringEncoding];
NSDictionary *dict = @{ @"q" : encoded };
[[myClient sharedClient] getPath:@"" parameters:dict ...]
AFNetworkingは辞書内の項目をエンコードしているため、検索文字列は二重にエンコードされています。これが、「%20」の%が「%25」に変換されている理由です。