現在、iOS で特殊文字をエスケープするパーセントに苦労しています。たとえば、クエリ パラメータ値に含まれている場合は「é」です。
AFNetworking を使用していますが、問題は AFNetworking に固有のものではありません。
「é」文字は「%E9」にパーセントエスケープする必要がありますが、結果は「%C3%A9」になります。その理由は、UTF8 では「é」がその 2 バイトで表されるためです。
実際のパーセント エスケープ方法はよく知られている方法で、文字列エンコーディングとして UTF8 を渡しています。文字列自体は @"é" です。
static NSString * AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(NSString *string, NSStringEncoding encoding)
{
static NSString * const kAFCharactersToBeEscaped = @":/?&=;+!@#$()~";
static NSString * const kAFCharactersToLeaveUnescaped = @"[].";
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, (__bridge CFStringRef)kAFCharactersToLeaveUnescaped, (__bridge CFStringRef)kAFCharactersToBeEscaped, CFStringConvertNSStringEncodingToEncoding(encoding));
}
UTF16 文字列エンコーディングを渡すことで解決することを期待していましたが、そうではありません。この場合、結果は "%FF%FE%E9%00" で、"%E9" が含まれていますが、明らかな何かが欠けているに違いありません。
なんだか頭が追いつかない。どんなポインタでも素晴らしいでしょう。