我目前正在努力解决 iOS 上特殊字符的百分比转义问题,例如查询参数值中包含的“é”。
我正在使用 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”,但我必须遗漏一些明显的东西。
不知怎的,我无法理解它。任何指针都会很棒。