URL Query item от NSURLComponents равны нулю - PullRequest
0 голосов
/ 14 января 2020

Я создаю NSURL URL будет содержать некоторый управляющий символ (японский)

    NSString* currentlocationbarString = @"mbos.help.jp/search?q=専門&pg=1"
NSString *escapedString = [currentlocationbarString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSURL* url = [NSURL URLWithString:escapedString];

// URL-адрес - mbos.help.jp% 2Fsearch% 3Fq =% E5% B0% 82% E9% 96% 80 & pg = 1

Когда я создаю NSURLComponents и пытаюсь получить элементы запроса, он дает мне ноль.

NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                resolvingAgainstBaseURL:YES];
NSArray *queryItems = urlComponents.queryItems;

// здесь проблема с queryItems

, если у кого-то есть решение для получения пунктов запроса, пожалуйста, помогите. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 января 2020

Проблема не в символах Юникода, когда вы добавляете кодировку, используйте правильный набор символов для моего случая. Я использовал следующий набор URLHostAllowedCharacterSet, это означает, что ваш NSURLComponents дает только кодировку для вашего хоста, чтобы получить правильное queryItems использование URLQueryAllowedCharacterSet вот так.

NSString* currentlocationbarString = @"mbos.help.jp/search?q=専門&pg=1"
NSString *escapedString = [currentlocationbarString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL* url = [NSURL URLWithString:escapedString];

Так что теперь вы можете получить queryItems.

NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                            resolvingAgainstBaseURL:YES];
NSArray *queryItems = urlComponents.queryItems;
0 голосов
/ 14 января 2020

Как минимум один из символов 門 門, который вы используете в строке поиска, - недопустимый Unicode в виде непарных суррогатных символов UTF-16 и, следовательно, не может быть закодирован stringByAddingPercentEncodingWithAllowedCharacters:, который поэтому возвращает nil.
Вы можете найти пример в этом посте .
Видимо, вам пришлось проверять японские символы, если кодировка возможна.
I Должен сказать, я тоже этого не ожидал!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...