Как кодировать часть запроса NSURL - PullRequest
0 голосов
/ 05 мая 2018

(iOS 8.0 +)

Я хочу использовать NSURL для передачи некоторых параметров в части запроса, например:

NSURLComponents *components = [[NSURLComponents alloc] initWithString:@"ft://market/detail"];
NSDictionary *parameters = @{@"username" : @"高高高", @"from" : @"中国北京"};
NSMutableArray *items = [[NSMutableArray alloc] init];
for (NSString *key in parameters.allKeys) {
    [items addObject:[[NSURLQueryItem alloc] initWithName:key value:parameters[key]]];
}
components.queryItems = items;
NSURL *url = components.URL;
NSLog(@"url : %@", url);

Однако, когда я получаю URL и анализирую его, я обнаруживаю, что китайские символы, переданные в части query, ненормальны, и я использовал NSURLComponents, чтобы проанализировать URL следующим образом:

NSURLComponents *anaComponents = [NSURLComponents componentsWithString:url.absoluteString];
NSMutableDictionary *queryParams = [[NSMutableDictionary alloc] init];
for (NSURLQueryItem *querItem in anaComponents.queryItems) {
    [queryParams setObject:querItem.value forKey:querItem.name];
}
NSLog(@"queryParams : %@", queryParams);

Ниже приведен журнал отладки:

url : ft://market/detail?username=%E9%AB%98%E9%AB%98%E9%AB%98&from=%E4%B8%AD%E5%9B%BD%E5%8C%97%E4%BA%AC
queryParams : {
    from = "\U4e2d\U56fd\U5317\U4eac";
    username = "\U9ad8\U9ad8\U9ad8";
}

Похоже, проблема заключается в том, что существует проблема с кодированием и декодированием таких символов, как китайский, даже если для кодирования значения запроса используется метод [parameters[key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]], он все равно неверен при декодировании.

Часть запроса, которую я хочу проанализировать, выглядит следующим образом: @{@"username" : @"高高高", @"from" : @"中国北京"};.

Надеюсь на вашу помощь здесь, искренне спасибо.

...