iOS アプリでAFNetworkingを使用しています。リクエスト パラメータにパーセント記号が含まれている場合に発生する問題を発見しました。その後、エンコードは失敗します。メソッドAFURLEncodedStringFromStringWithEncoding
は nil を返します。
このコードをテストしたところ、次のように出力されます(null)
。
NSLog(@"%@", AFURLEncodedStringFromStringWithEncoding(@"%", NSUTF8StringEncoding));
予想される出力は次のようになります%25
。他の文字は問題なくエンコードできます。
メソッドは次のように定義されます。
NSString * AFURLEncodedStringFromStringWithEncoding(NSString *string, NSStringEncoding encoding) {
static NSString * const kAFLegalCharactersToBeEscaped = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\|~ ";
// Following the suggestion in documentation for `CFURLCreateStringByAddingPercentEscapes` to "pre-process" URL strings (using stringByReplacingPercentEscapesUsingEncoding) with unpredictable sequences that may already contain percent escapes.
return [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)[string stringByReplacingPercentEscapesUsingEncoding:encoding], NULL, (CFStringRef)kAFLegalCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding)) autorelease];
}
ここで何がうまくいかないのですか?