2010-09-06 10 views
0

В моей программе я разрешаю пользователю вводить некоторые слова в текстовое поле. Тогда моя программа будет использовать эти слова для формирования строки html. Строка будет использоваться в NSURL, чтобы я мог подключиться к веб-сайту.Преобразование строк в Objective-C

Этот метод отлично подходит для английских слов. Но когда я вводил там какой-то китайский (или корейский), я не работаю. Поэтому я считаю, что мне нужно преобразовать введенные данные, прежде чем передавать их в NSURL. Однако я не мог найти способ сделать это. Вот пример того, как выглядит мой код.

NSString *searchedString = theSearchBar.text; 

NSString *urlToBeSearched = [[NSString alloc] 
    initWithFormat:@"http://www.awebsite.com/search/%@", 
    searchedString]; 
NSURLRequest *urlRequest = [[NSURLRequest alloc] 
    initWithURL:[NSURL URLWithString:urlToBeSearched] 
    cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:50]; 
NSURLConnection *tempCon =[[NSURLConnection alloc] initWithRequest:urlRequest 
      delegate:self]; 

Тогда, конечно же, выпуская их позже.

Например, если searchString = 你好, urlLink будет http://www.awebsite.com/search/你好. NSURLConnection не нравится, и мне будет присвоена ошибка «Bad Url». Однако, если urlLink «% E4% BD% A0% E5% A5% BD», он даст мне правильную ссылку.

+0

Не могли бы вы высказать свой * настоящий * код. Это не будет компилироваться, и вы никогда не будете использовать searchString. – JeremyP

ответ

2

Набор символов, разрешенных в URI, в значительной степени ограничен подмножеством US-ASCII (см. RFC2396). Это означает, что ваши китайские иероглифы должны быть пропущены в URI. В документации для NSURL +URLWithString: указано, что строка должна соответствовать RFC, поэтому вам нужно уклониться от строки до, назвав этот метод.

К счастью, у NSString есть метод, который позволит вам сделать это с именем -stringByAddingPercentEscapesUsingEncoding:. Вам все равно нужно выбрать подходящую кодировку, и какой из них выбрать, зависит от того, как сервер декодирует строку URL. Самый простой вариант - использовать UTF-8 с обоих концов. Вам необходимо сделать что-то вроде:

NSString* searchedString = [theSearchBar.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
NSString* urlToBeSearched = [NSString stringWithFormat:@"http://www.awebsite.com/search/%@", searchedString]; 

// everything else the same, except you don't need to release urlToBeSearched 
+0

Большое вам спасибо. Прекрасно работает. – Draco

+0

Ещё один вопрос. Как снова декодировать searchString обратно на китайский? – Draco

+0

Вам нужно будет отменить действия. На вашем сервере вы должны нарезать фронт, чтобы у вас был бит после «поиска /», тогда вам нужно отменить кодировку URL. Как вы это делаете, зависит от языка, на котором написана ваша серверная сторона. – JeremyP

0

Вы пробовали кодировать строку поиска?

[NSString stringByAddingPercentEscapesUsingEncoding:/encoding-of-choice/];

Не уверен, что кодирующие вам будет использовать для китайских символов, хотя.