Передача символов кириллицы в качестве параметра URL

Мне нужно передать символы кириллицы в качестве параметра URL-адреса в моем приложении для iPhone. Пример URL-адреса выглядит так:

http://www.mysite.com/script.php?message=страшная

Когда я использую этот URL-адрес в своем браузере, он возвращает правильный результат. Однако в моем приложении кириллица не нравится, и в итоге я получаю "неверный URL" в коде didFailWithError.

Я пробовал несколько кодировок в своем браузере, чтобы обойти это, но безуспешно. Есть ли способ отправить точный пример URL-адреса выше через приложение для iPhone? Фрагмент кода, который я использую:

selectedWord = @"страшная";
NSString *requestURL = [NSString stringWithFormat:@"http://www.mysite.com/script.php?message=%@", selectedWord];
NSLog (requestURL);
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];

[[NSURLConnection alloc] initWithRequest:request delegate:self];

В приведенном выше коде я жестко закодировал кириллицу в NSString *selectedWord для целей отладки. В реальном приложении он будет динамическим на основе пользовательского ввода.

Я попробовал более сложный POST, думая, что смогу передать кириллицу как данные, а не как текст, но либо я делаю это неправильно, либо это тоже не работает.

Любой пример кодирования, который я могу попробовать в своем браузере, а затем реализовать в приложении, будет полезен. Я понимаю, что кириллица отклоняется в NSURL, но я надеялся, что это можно обойти с помощью другого кода или кодировки.


person user472938    schedule 12.10.2010    source источник


Ответы (1)


Что, если вы измените его на:

encodedSelectedWord = [selectedWord stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *requestURL = [NSString stringWithFormat:@"http://www.mysite.com/script.php?message=%@", encodedSelectedWord];

ссылка на документацию

person Kris Markel    schedule 12.10.2010
comment
Спасибо, Робот К! Это сработало! Думаю, мне действительно нужно больше искать в документации все возможные кодировки. Я не видел, что один упоминается, где я смотрел! - person user472938; 12.10.2010
comment
Это не легко найти. NSString — огромный класс, и названия некоторых методов довольно запутаны. - person Kris Markel; 12.10.2010
comment
Спасибо, это работает и для испанских специальных символов, таких как á, é, í, ó, ú и ñ. - person mvasco; 27.10.2014
comment
NSString * encodedString = [@string для кодирования stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]; используйте это, потому что ваш метод устарел - person Genevios; 24.06.2018